如何使用正则表达式在字母字符和数字字符之间插入空格?

时间:2018-02-24 14:27:57

标签: python regex

我正在尝试在数字字符和字母字符之间插入空格,以便将数字字符转换为如下字样:

Input : 
     subject101
     street45
Output :
     subject 101
     street 45

我试过这个

re.sub('[a-z][\d]|[\d][a-z]',' ','subject101')

但是输出是这样的:

subjec 01

我怎么能用python做到这一点?

2 个答案:

答案 0 :(得分:4)

试试这个正则表达式:

(?i)(?:(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d))

<强> Click for Demo

用空格替换每个匹配

<强>解释

  • (?i) - 使匹配不区分大小写的修饰符
  • (?<=\d)(?=[a-z]) - 找到前面有一个数字后跟一个字母
  • 的位置
  • | - 或
  • (?<=[a-z])(?=\d) - 找到前面有一个字母后跟一个数字
  • 的位置

Code output

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'