【问题标题】:Using regex in Python 2.7.3 to search text and output matches在 Python 2.7.3 中使用正则表达式搜索文本并输出匹配项
【发布时间】:2013-03-17 00:37:32
【问题描述】:

我正在努力完成标题所说的内容。该程序旨在从指定路径读取 .txt 文件并匹配代码中指定的术语。这是我目前所拥有的:

import re

source = open("C:\\test.txt", "r")
lines = []

for line in source:
    line = line.strip()
    lines.append(line)
    if re.search('reply', line):
        print 'found: ', line

如您所见,我使用 re.search 指定术语“回复”,但这将我限制为一个术语。我知道有一种方法可以指定要搜索的单词列表或字典,但我的尝试失败了。我认为可以创建一个类似...的列表

keywords = ['reply', 'error', 'what'] 

...但是尽管我在此站点上阅读过这些内容,但我似乎无法将其正确地合并到代码中。非常感谢您提供任何建议或帮助!

PS。如果我想让搜索区分大小写,我可以使用 ...

"(.*)(R|r)eply(.*)"

...在我要查找的术语列表中?

【问题讨论】:

  • 对于 PS,我假设您的意思是让它不区分大小写(不区分大小写)。如果是这样,更简单的方法是 str.lower()。

标签: python regex text-files


【解决方案1】:

一种方式:

import re
source = open("input", "r")
lines = []
keywords = ['reply', 'error', 'what']
# join list with OR, '|', operators
# re.I makes it case-insensitive
exp = re.compile("|".join(keywords), re.I)
for line in source:
    line = line.strip()
    lines.append(line)
    if re.search(exp, line):
        print 'found: ', line

【讨论】:

  • 谢谢!从中学到了很多:)
【解决方案2】:

使用 re.search(),你传递一个字符串,但你可以指定相当复杂的模式。请参阅 Python re module 上的文档,其中有一个关于“正则表达式语法”的部分。

事实上,你的问题已经有了答案..."R|r" 搜索“R”或“r”,所以 "reply|error|what" 搜索“回复”、“错误”或“什么”。

PS。如果我想让搜索区分大小写,我可以使用... "(.*)(R|r)eply(.*)"

不需要.* 位(它可能会使您的代码变慢)。 re.search() 函数在字符串中查找匹配anywhere(R|r)eply 将寻找“回复”或“回复”,它不会匹配“回复”或“回复”。

如果您想要不区分大小写的搜索,可以将flags=re.IGNORECASE 选项传递给re.search()。例如:

re.search('reply', line, flags=re.IGNORECASE)

【讨论】:

  • 谢谢 :) 在 .py 文件中添加关于此的评论!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多