python - 正则表达式:在数字后跟字母时添加空格

标签 python regex regexp-replace

在一组数字之后,我想在字符串中添加一个空格。例如,以下字符串应在数字后添加空格:

Before                           After
"0ABCD TECHNOLOGIES SERVICES"    "0 ABCD TECHNOLOGIES SERVICES"
"ABCD0 TECHNOLOGIES SERVICES"    "ABCD 0 TECHNOLOGIES SERVICES"

"ABCD 0TECHNOLOGIES SERVICES"    "ABCD 0 TECHNOLOGIES SERVICES"
"ABCD TECHNOLOGIES0 SERVICES"    "ABCD TECHNOLOGIES 0 SERVICES"

"ABCD TECHNOLOGIES 0SERVICES"    "ABCD TECHNOLOGIES 0 SERVICES"
"ABCD TECHNOLOGIES SERVICES0"    "ABCD TECHNOLOGIES SERVICES 0"

我一直在尝试使用 Python 中的正则表达式,如下所示:

text= re.sub(r'([0-9]+)?([A-Za-z]+)?([0-9]+)?',
             r'\1 \2 \3',
             text,
             0,
             re.IGNORECASE)

使用前面的代码,我得到了不想要的空格,这会影响其他正则表达式转换:

"0 abcd     technologies     services   "

如何在字符串中添加空格而不添加不需要的空格?

最佳答案

您可以使用

re.sub(r'(?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)', ' ', text)

请参阅regex demo .

图案详细信息

  • (?<=\d)(?=[^\d\s]) - 数字和字符之间的位置(数字和空格除外)
  • | - 或
  • (?<=[^\d\s])(?=\d) - 数字以外的字符与空格和数字之间的位置。

Python test :

import re
tests = ['0ABCD TECHNOLOGIES SERVICES',
'ABCD0 TECHNOLOGIES SERVICES',
'ABCD 0TECHNOLOGIES SERVICES',
'ABCD TECHNOLOGIES0 SERVICES',
'ABCD TECHNOLOGIES 0SERVICES',
'ABCD TECHNOLOGIES SERVICES0']

rx = re.compile(r'(?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)')

for test in tests:
    print(rx.sub(' ', test))

输出:

0 ABCD TECHNOLOGIES SERVICES
ABCD 0 TECHNOLOGIES SERVICES
ABCD 0 TECHNOLOGIES SERVICES
ABCD TECHNOLOGIES 0 SERVICES
ABCD TECHNOLOGIES 0 SERVICES
ABCD TECHNOLOGIES SERVICES 0

关于python - 正则表达式:在数字后跟字母时添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724564/

相关文章:

python - QMediaPlayer setPlaybackRate > 1 会导致高音调音频

Java::用正则表达式解析多行文本

正则表达式:替换已知固定字符串以外的任何字符串? (用引号分隔)

database - 从 postgres 表列中删除括号但保留其中的单词

c# - 如何在C#字符串中将上标字符转换为普通文本

python - 如何获取 types.SimpleNamespace 类型中的所有用户定义属性?

python - 在flask的celery文档中,为什么celery任务需要名称?

python - 用python计算csv文件中的列

python - 在 python 中拆分一组大写字母

javascript - 为什么\b 有时只能与 javascript str.match 一起使用