用python在波斯语数字和字母之间添加空格

2024-07-05 07:44:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在波斯语数字和波斯语字母之间加上空格,如下所示:

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

这个过程的Java代码如下所示。你知道吗

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

但是我找不到任何python解决方案。你知道吗


Tags: 代码过程字母数字java解决方案空格str
3条回答

你可以用

re.sub(r'([^\W\d_])(\d)', r'\1 \2', s, flags=re.U)

注意,在python3.x中,re.U标志是多余的,因为默认情况下模式是Unicode感知的。你知道吗

参见online Python demoregex demo。你知道吗

图案细节

  • ([^\W\d_])-捕获组1:任何Unicode字母(字面上,除了非单词、数字或下划线字符以外的任何字符)
  • (\d)-捕获组2:任何Unicode数字

替换模式是组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)

相关问题 更多 >