我正在尝试在数字字符和字母字符之间插入空格,以便将数字字符转换为如下字样:
Input :
subject101
street45
Output :
subject 101
street 45
我试过这个
re.sub('[a-z][\d]|[\d][a-z]',' ','subject101')
但是输出是这样的:
subjec 01
我怎么能用python做到这一点?
答案 0 :(得分:4)
试试这个正则表达式:
(?i)(?:(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d))
<强> Click for Demo 强>
用空格替换每个匹配
<强>解释强>
(?i)
- 使匹配不区分大小写的修饰符(?<=\d)(?=[a-z])
- 找到前面有一个数字后跟一个字母|
- 或(?<=[a-z])(?=\d)
- 找到前面有一个字母后跟一个数字import re
regex = r"(?i)(?:(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d))"
test_str = ("subject101\n"
" street45")
subst = " "
result = re.sub(regex, subst, test_str, 0)
if result:
print (result)
答案 1 :(得分:2)
执行此操作的方法是将可调用对象传递给re.sub
。这允许您重用匹配的子字符串来生成替换值。
subject = '101subject101'
s = re.sub(r'[a-zA-Z]\d|\d[a-zA-Z]', lambda m: ' '.join(m.group()), subject )
# s: '101 subject 101'