我正在尝试为以下模式抓取文件:
Str[SPACE][MINUS]Str[SPACE]Number[SPACE][SPACE]Number[SPACE]Number
匹配的行的示例(不带“”)
John Anderson - Hong Kong 24 486 2
Fred Peters - Shanghai -4 186 0
注意:我不知道为什么stackexchange将2个空格转换为1个空格,但是在2个第一个数字之间有2个空格。
我认为这样做是对的:
import re
text = open('pokertournament.txt')
for line in text:
x = re.findall(r'.*(\s+[\-]+\s+[a-zA-Z]+\s+[0-9\-]+\s+\s+[0-9\-]?).*', line)
if len(x) != 0:
print(line)
我在尝试的是寻找一个简单的模式:
[SPACE] [MINUS] [海峡] [SPACE]号码[SPACE]编号[SPACE] [SPACE]
但是如果我在包含这个内容的文本文件上运行它:
OLD - Break in, Allin win 1 Total Cards Total Score Total Cards
John Anderson - Hong Kong 24 486 2
Fred Peters - Shanghai -4 186 0
OLD - Break in, Allin win 1 Total Cards Total Score Total Cards
Peter Anderson - Tokyo Habor 24 486 2
然后结果是它只找到这一行:
Fred Peters - Shanghai -4 186 0
任何人都可以帮我纠正这个表达方式,以便我能够理解如何正确使用它?
答案 0 :(得分:0)
您可以使用(?m)^[a-zA-Z]+\s[a-zA-Z]+[- ]+[a-zA-Z\s]+\s[-\d\s]+$
(?m)
表示多行匹配。
行动中:
s = """
OLD - Break in, Allin win 1 Total Cards Total Score Total Cards
John Anderson - Hong Kong 24 486 2
Fred Peters - Shanghai -4 186 0
OLD - Break in, Allin win 1 Total Cards Total Score Total Cards
Peter Anderson - Tokyo Habor 24 486 2
"""
import re
print(re.findall(r'(?m)^[a-zA-Z]+\s[a-zA-Z]+[- ]+[a-zA-Z\s]+\s[-\d\s]+$', s))
输出:
['John Anderson - Hong Kong 24 486 2', 'Fred Peters - Shanghai -4 186 0', 'Peter Anderson - Tokyo Habor 24 486 2\n']