python - 正则表达式:在数字后跟字母时添加空格
问题描述
在一组数字之后,我想在字符串中添加一个空格。例如,以下字符串应在数字后添加一个空格:
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)
请参阅正则表达式演示。
图案细节
(?<=\d)(?=[^\d\s])
- 数字和字符之间的位置,而不是数字和空格|
- 或者(?<=[^\d\s])(?=\d)
- 字符而非数字与空格和数字之间的位置。
蟒蛇测试:
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
推荐阅读
- spring-boot - SpringBoot中缺少一些信息如何处理Post Method中的MissingServletRequestParameterException
- javascript - 如何让 map 函数返回一个大于第一个的数组?
- three.js - 如何线性插值 THREE.Object3d() 的旋转值?
- c# - .net core 3.1 无法提供带有 html 扩展名的文件
- python - 如何在 Python 中读取排序和设置的文本文件?
- java - 通过适用于 Office 365 的 Java Api 发送邮件
- swift - 通过字符串枚举以查找整数,更改然后替换它们 - Swift
- c++11 - 工厂方法 C++
- javascript - 使用 JavaScript 更改使用用户文件的图像
- javascript - 需要一个函数将 JSON 数组中除最后两个之外的所有项目加在一起