【问题标题】:Regex function to extract selected rows用于提取选定行的正则表达式函数
【发布时间】:2023-02-24 21:45:05
【问题描述】:
我有一个这样的文本文件
Some text and random stuff that I don't need
2 8
2 9 T
4 9
1 10
2 10 F
7 11 T
More random stuff
我应该如何构建一个正则表达式函数来提取仅包含数字的行以及包含数字和 T 或 F 的行?
到目前为止,我对代码的想法是这样的
with open(file, 'r') as log_file:
# opening file
file = log_file
while True:
line = file.readlines()
# if line in regex function:
data.append(line)
# closing file
break
我该如何解决这个问题?
【问题讨论】:
标签:
python
regex
text
extract
【解决方案1】:
使用这种方法,第一个 re 将仅匹配数字,第二个 re 将匹配带有字母 T 或 F 的数字。您还可以使用 for 循环而不是 while 循环。
import re
matched_data = []
with open(file, 'r') as log_file:
data = log_file.readlines()
for line in data:
line = line.strip()
if re.match(r'^d+ d+|[TF]$', line):
matched_data.append(line)
print(matched_data)
如果某些行以一行开头并且您也想匹配这些行,则应将上面的行模式替换为r'^[TF]|d+ d+|[TF]$'
测试代码:
import re
data = """
2 8
2 9 T
4 9
1 10
2 10 F
7 11 T
5 B 37
10 9 G
17 6 Z
"""
data = data.splitlines()
matched_data = []
for line in data:
line = line.strip()
if re.match(r'^d+ d+|[TF]$', line):
matched_data.append(line)
print(matched_data)
# ['2 8', '2 9 T', '4 9', '1 10', '2 10 F', '7 11 T']
【解决方案2】:
我们可以使用re.findall() 来获取整个文件中的所有事件。
import re
regexp = r"^d[d ]*[T|F]?"
with open("file.txt", "r") as fp:
# Not suggested if the file is large.
data = fp.read()
print(re.findall(regexp, data, re.M))
输出:
['2 8 ', '2 9 T', '4 9', '1 10 ', '2 10 F', '7 11 T']
对于大文件,最好逐行迭代。
data = []
with open(file, 'r') as fp:
for line in fp:
_match = re.match(regexp, line)
if _match:
data.append(_match.group())
如果你有兴趣了解更多关于正则表达式的知识,请访问regexone