【问题标题】:Regex in python (123/4)python中的正则表达式(123/4)
【发布时间】:2018-10-31 17:47:42
【问题描述】:

我有以下字符串:

line = '5320411,  996/7     W/O ABC ANO-20'

遇到 123/4 形式的数字后,我想在其中添加逗号。 我的方法是使用我相当新的正则表达式。我尝试了以下方法:

re.sub('^(\S+)\s+\[0-9]{3}/[0-9]{1}', ',', line)

首先,我检查开头是否有一个或多个空格,然后是三位数字,然后是斜线,然后是另一个数字。但是,我似乎不知道如何在这种模式出现后放置逗号。

预期的输出应如下所示:

line = '5320411,  996/7 ,    W/O ABC ANO-20'

【问题讨论】:

    标签: python regex csv


    【解决方案1】:

    re.sub

    re.sub(r'\b(\d{3}\/\d)\b', r'\1,', line)
    
    # Output
    '5320411,  996/7,     W/O ABC ANO-20'
    

    正则表达式解释(演示here):

    \b                  # Matches a word boundary
    (                   # Start of matching group 1
      \d{3}             # Matches 3 digits
      \/                # Matches /
      \d                # Matches 1 digit
    )                   # End of matching group 1
    \b                  # Matches a word boundary
    

    这里的关键是我们不想用逗号替换我们的模式,我们想用我们的模式加上一个逗号来替换我们的模式,我们可以通过捕获我们的模式来做到这一点在匹配的第一组中,并替换为匹配的第一组,在末尾添加逗号,或者:\1,

    【讨论】:

    • 只是一件小事。如果在斜杠之后我有两位而不是一位,我会使用 re.sub(r'\b(\d{3}\/\d{1 | 2]})\b', r'\1,' , line) 检查一位数和两位数?
    • 正确,\b(\d{3}\/\d{1,2})\b 可以接受 1 位或 2 位数字。
    【解决方案2】:

    您使用积极的向后看:

    import re
    line = '5320411,  996/7     W/O ABC ANO-20'
    new_line = re.sub('(?<=\d{3}/\d{1})\s', ' ,', line)
    

    输出:

    '5320411,  996/7 ,    W/O ABC ANO-20'
    

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      相关资源
      最近更新 更多