我正试图解决正则表达式难题,但我感到困惑。我期望以下几点:
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))