使用 python re 在波斯数字和字母之间添加 space
Add space between Persian numeric and letter with python re
我想在波斯语数字和波斯语字母之间添加space,像这样:
"سعید123" 转换为 "سعید 123"
Java 这个程序的代码如下。
str.replaceAll("(?<=\p{IsDigit})(?=\p{IsAlphabetic})", " ").
但我找不到任何python解决方案。
我不确定这是否正确。
import re
k = "سعید123"
m = re.search("(\d+)", k)
if m:
k = " ".join([m.group(), k.replace(m.group(), "")])
print(k)
输出:
123 سعید
您可以使用
re.sub(r'([^\W\d_])(\d)', r' ', s, flags=re.U)
请注意,在 Python 3.x 中,re.U
标志是多余的,因为模式默认是 Unicode 识别的。
参见online Python demo and a regex demo。
图案详情
([^\W\d_])
- 捕获第 1 组:任何 Unicode 字母(字面意思是除非单词、数字或下划线字符以外的任何字符)
(\d)
- 捕获第 2 组:任何 Unicode 数字
替换模式是第 1 组和第 2 组占位符(指相应的捕获值)与它们之间的 space 的组合。
您可以使用具有前瞻性的正则表达式的变体:
re.sub(r'[^\W\d_](?=\d)', r'\g<0> ', s)
有一个简短的正则表达式,您可以依靠它来匹配字母和数字之间的边界(任何语言):
\d(?=[^_\d\W])|[^_\d\W](?=\d)
细分:
\d
匹配一个数字
(?=[^_\d\W])
语言字母前面
|
或
[^_\d\W]
匹配一种语言的字母
(?=\d)
前一个数字
Python:
re.sub(r'\d(?![_\d\W])|[^_\d\W](?!\D)', r'\g<0> ', str, flags = re.UNICODE)
但根据 this answer,这是完成此任务的正确方法:
re.sub(r'\d(?=[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی])|[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی](?=\d)', r'\g<0> ', str, flags = re.UNICODE)
我想在波斯语数字和波斯语字母之间添加space,像这样:
"سعید123" 转换为 "سعید 123"
Java 这个程序的代码如下。
str.replaceAll("(?<=\p{IsDigit})(?=\p{IsAlphabetic})", " ").
但我找不到任何python解决方案。
我不确定这是否正确。
import re
k = "سعید123"
m = re.search("(\d+)", k)
if m:
k = " ".join([m.group(), k.replace(m.group(), "")])
print(k)
输出:
123 سعید
您可以使用
re.sub(r'([^\W\d_])(\d)', r' ', s, flags=re.U)
请注意,在 Python 3.x 中,re.U
标志是多余的,因为模式默认是 Unicode 识别的。
参见online Python demo and a regex demo。
图案详情
([^\W\d_])
- 捕获第 1 组:任何 Unicode 字母(字面意思是除非单词、数字或下划线字符以外的任何字符)(\d)
- 捕获第 2 组:任何 Unicode 数字
替换模式是第 1 组和第 2 组占位符(指相应的捕获值)与它们之间的 space 的组合。
您可以使用具有前瞻性的正则表达式的变体:
re.sub(r'[^\W\d_](?=\d)', r'\g<0> ', s)
有一个简短的正则表达式,您可以依靠它来匹配字母和数字之间的边界(任何语言):
\d(?=[^_\d\W])|[^_\d\W](?=\d)
细分:
\d
匹配一个数字(?=[^_\d\W])
语言字母前面|
或[^_\d\W]
匹配一种语言的字母(?=\d)
前一个数字
Python:
re.sub(r'\d(?![_\d\W])|[^_\d\W](?!\D)', r'\g<0> ', str, flags = re.UNICODE)
但根据 this answer,这是完成此任务的正确方法:
re.sub(r'\d(?=[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی])|[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی](?=\d)', r'\g<0> ', str, flags = re.UNICODE)