用python re

时间:2018-05-07 11:17:22

标签: python regex persian

我希望在波斯语字母和波斯语字母之间添加空格,如下所示:

“سعید123”转换为“سعید123”

此过程的Java代码如下所示。

str.replaceAll("(?<=\\p{IsDigit})(?=\\p{IsAlphabetic})", " ").

但我找不到任何 python解决方案

3 个答案:

答案 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 demoregex 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)

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)