使用正则表达式提取多个文本并将存在作为条件进行匹配

时间:2018-02-21 04:38:22

标签: python regex

我正在尝试使用正则表达式提取元素,同时还需要区分哪些行末尾有“-External”。我正在使用的命名结构是:

<ServerName>: <Country>-<CountryCode>
or 
<ServerName>: <Country>-<CountryCode>-External

例如:

test1 = 'Neo1: Brussels-BRU-External'
test2 = 'Neo1: Brussels-BRU'

match = re.search(r'(?<=: ).+', test1)

print match.group(0)

这给了我“布鲁塞尔-BRU”。我试图分别提取“布鲁塞尔”和“BRU”,而不关心:左边的任何内容。

之后,我需要知道一行有“-External”。有没有办法可以将“-External”的存在视为True而不是None

1 个答案:

答案 0 :(得分:0)

我建议这里不需要正则表达式,只需简单的拆分或2就可以得到你想要的东西。这是一种将split()行分成片段的方法,然后您可以从中选择您感兴趣的内容:

代码:

def split_it(a_string):
    on_colon = a_string.split(':')
    return on_colon[0], on_colon[1].strip().split('-')

测试代码:

tests = (
    'Neo1: Brussels-BRU-External',
    'Neo1: Brussels-BRU',
)

for test in tests:
    print(split_it(test))

结果:

('Neo1', ['Brussels', 'BRU', 'External'])
('Neo1', ['Brussels', 'BRU'])

分析:

列表的长度可用于确定是否存在附加字段'External'