我正试图解决正则表达式难题,但我感到困惑。我期望以下几点:

import re
import fileinput

TEST_DATA = [
    "6",
    "2 ",
    "1 877 2638277 ",
    "91-011-23413627"
]

for line in TEST_DATA:
    print(
        re.sub(
            r'(\d{1,3})[- ](\d{2,3})[- ]+(\d{5,10})',
            r'CountryCode=\1,LocalAreaCode=\2,Number=\3',
            line))


给我这个:

CountryCode=1,LocalAreaCode=877,Number=2638277
CountryCode=91,LocalAreaCode=011,Number=23413627


相反,我得到这个:

6
2
CountryCode=1,LocalAreaCode=877,Number=2638277
CountryCode=91,LocalAreaCode=011,Number=23413627


我不明白为什么打印不匹配的行。

最佳答案

re.sub返回字符串,无论是否发生替换。从the documentation


  返回通过用替换repl替换字符串中最左边的非重叠模式所获得的字符串。如果找不到该模式,则字符串将保持不变。


也许您可以先检查是否出现match,然后执行替换。

for line in TEST_DATA:
    if re.match(my_pattern, line):
        print(
            re.sub(
                r'(\d{1,3})[- ](\d{2,3})[- ]+(\d{5,10})',
                r'CountryCode=\1,LocalAreaCode=\2,Number=\3',
                line))

09-26 06:48