繁体   English   中英

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

[英]How to insert space between alphabet characters and numeric character using regex?

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

Input : 
     subject101
     street45
Output :
     subject 101
     street 45

我试过这个

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

但输出是这样的:

subjec 01

我如何使用 python 来做到这一点?

试试这个正则表达式:

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

点击演示

用空格替换每个匹配项

说明:

  • (?i) - 使匹配不区分大小写的修饰符
  • (?<=\\d)(?=[az]) - 找到前面是一个数字,后面是一个字母的位置
  • | - 或
  • (?<=[az])(?=\\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)

一种方法是将可调用对象传递给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'

您可以在正则表达式中使用 if 语句(?(#group))来检查 char 是数字还是字母。

正则表达式(?<=([az])|\\d)(?=(?(1)\\d|[az]))

蟒蛇代码:

def addSpace(text):
    return re.sub(r'(?<=([a-z])|\d)(?=(?(1)\d|[a-z]))', ' ', text)

输出:

addSpace('subject101')
>>> subject 101
addSpace('101subject')
>>> 101 subject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM