2024-07-05 07:44:04 发布
网友
我想在波斯语数字和波斯语字母之间加上空格,如下所示:
“سعید123”转换为“سعید123”
这个过程的Java代码如下所示。你知道吗
str.replaceAll("(?<=\\p{IsDigit})(?=\\p{IsAlphabetic})", " ").
但是我找不到任何python解决方案。你知道吗
你可以用
re.sub(r'([^\W\d_])(\d)', r'\1 \2', s, flags=re.U)
注意,在python3.x中,re.U标志是多余的,因为默认情况下模式是Unicode感知的。你知道吗
re.U
参见online Python demo和regex demo。你知道吗
图案细节
([^\W\d_])
(\d)
替换模式是组1和组2占位符(指相应的捕获值)的组合,它们之间有一个空格。你知道吗
您可以使用带有前瞻性的regex变体:
re.sub(r'[^\W\d_](?=\d)', r'\g<0> ', s)
见this regex demo。你知道吗
我不确定这是不是一个正确的方法。你知道吗
import re k = "سعید123" m = re.search("(\d+)", k) if m: k = " ".join([m.group(), k.replace(m.group(), "")]) print(k)
输出:
123 سعید
有一个短正则表达式,可以用来匹配字母和数字之间的边界(在任何语言中):
\d(?=[^_\d\W])|[^_\d\W](?=\d)
Live demo
细分:
\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)
你可以用
注意,在python3.x中,
re.U
标志是多余的,因为默认情况下模式是Unicode感知的。你知道吗参见online Python demo和regex demo。你知道吗
图案细节
([^\W\d_])
-捕获组1:任何Unicode字母(字面上,除了非单词、数字或下划线字符以外的任何字符)(\d)
-捕获组2:任何Unicode数字替换模式是组1和组2占位符(指相应的捕获值)的组合,它们之间有一个空格。你知道吗
您可以使用带有前瞻性的regex变体:
见this regex demo。你知道吗
我不确定这是不是一个正确的方法。你知道吗
输出:
有一个短正则表达式,可以用来匹配字母和数字之间的边界(在任何语言中):
Live demo
细分:
\d
匹配一个数字(?=[^_\d\W])
在一种语言的字母前面|
或[^_\d\W]
匹配一种语言的字母(?=\d)
数字前Python:
但根据this answer,这是完成这项任务的正确方法:
相关问题 更多 >
编程相关推荐