Python re.match:如何进行特定的“ OR”匹配

时间:2018-10-31 09:32:43

标签: python regex match

假设我有一个数据文件:

# cat 1.txt
#$$!#@#VM - This is VM$^#^#$^$^
%#%$%^SAS - This is SAS&%^#$^$
!@#!@%^$^MD - This is MD!@$!@%$

现在我要过滤以VM和SAS(不包括MD)开头的单词

预期结果:

VM - This is VM
SAS - This is SAS

我正在使用此代码,但显示了所有行。

import re

f = open("1.txt", "r")

for line in f:
    p = re.match(r'.+?((SAS|VM)[-a-zA-Z0-9 ]+).+?', line)
    if p:
        print (p.groups()[0])

在正则表达式中,我可以使用(pattern1 | pattern2)来匹配pattern1或pattern2 但在重新匹配中,括号用于匹配模式。

如何在re.match()函数中指定“两个匹配项”?

2 个答案:

答案 0 :(得分:0)

这是一种方法。

例如:

import re

with open(filename) as infile:
    for line in infile:
        line = re.sub(r"[^A-Za-z\-\s]", "", line.strip())
        if line.startswith(("VM", "SAS")):
            print(line)

输出:

VM - This is VM
SAS - This is SAS

答案 1 :(得分:0)

像这样尝试:

with open('1.txt') as f:
    for line in f:
        extract = re.match('.+?((SAS|VM)[-a-zA-Z0-9 ]+).+?', line)
        if extract:
            print(extract.group(1))