【问题标题】:How to insert space between alphabet characters and numeric character using regex?如何使用正则表达式在字母字符和数字字符之间插入空格?
【发布时间】:2018-02-24 14:27:57
【问题描述】:

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

Input : 
     subject101
     street45
Output :
     subject 101
     street 45

我试过这个

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

但输出是这样的:

subjec 01

我怎样才能使用 python 做到这一点?

【问题讨论】:

  • 你有没有尝试过?
  • 是的,我试过这个re.sub('[a-z][\d]|[\d][a-z]',' ',line),但它也删除了一些第一个数字
  • 好的,把这个添加到你的问题中。它还可以让我们帮助您了解为什么它不起作用

标签: python regex


【解决方案1】:

试试这个正则表达式:

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

Click for Demo

用空格替换每个匹配项

说明:

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

【讨论】:

    【解决方案2】:

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

    正则表达式:(?&lt;=([a-z])|\d)(?=(?(1)\d|[a-z]))

    Python 代码:

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

    输出:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2019-10-16
        相关资源
        最近更新 更多