我希望在波斯语字母和波斯语字母之间添加空格,如下所示:
“سعید123”转换为“سعید123”
此过程的Java代码如下所示。
str.replaceAll("(?<=\\p{IsDigit})(?=\\p{IsAlphabetic})", " ").
但我找不到任何 python解决方案。
答案 0 :(得分:1)
我不确定这是否是正确的方法。
import re
k = "سعید123"
m = re.search("(\d+)", k)
if m:
k = " ".join([m.group(), k.replace(m.group(), "")])
print(k)
<强>输出:强>
123 سعید
答案 1 :(得分:1)
您可以使用
re.sub(r'([^\W\d_])(\d)', r'\1 \2', s, flags=re.U)
请注意,在Python 3.x中,re.U
标志是冗余的,因为模式默认情况下是Unicode。
请参阅online Python demo和regex demo。
模式详情
([^\W\d_])
- 捕获第1组:任何Unicode字母(字面意思是除非字,数字或下划线字符以外的任何字符)(\d)
- 捕获第2组:任何Unicode数字替换模式是第1组和第2组占位符的组合(指相应的捕获值),它们之间有空格。
您可以使用前瞻性的正则表达式的变体:
re.sub(r'[^\W\d_](?=\d)', r'\g<0> ', s)
请参阅this regex demo。
答案 2 :(得分:1)
你可以依靠一个简短的正则表达式来匹配字母和数字之间的边界(用任何语言):
\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)