python - 正则表达式 Python

标签 python regex

我有以下 python 代码,它将尝试读取输入文件并查找给定正则表达式的以下实例:

[fF][eE][bB]([1-2][0-9]|[0-9]

我编写了以下Python代码

#!/usr/bin/python
import re
import sys

textFile = open(sys.argv[1], 'r')
fileText = textFile.read()
textFile.close()
matches = re.findall("[fF][eE][bB] ([1-2][0-9]|[0-9])",fileText)
print matches

我的输入文件是:

1 2 3 the
the quick 2354
feb 1 
feb 0
feb -10
feb23
feb 29
feb 3
february 10

但是,当我运行代码时,我得到以下输出:['1','29', '3']

我希望我的输出更像 ['feb 1', 'feb 29', 'feb 3']

我不太确定我做错了什么。任何帮助将不胜感激。

最佳答案

你应该read the documentationre.findall 仅返回表达式中存在的捕获组。您应该简单地从正则表达式中删除捕获组:

matches = re.findall("[fF][eE][bB] (?:[1-2][0-9]|[0-9])",fileText)
                                    ^^

也就是说,这个正则表达式也将匹配 feb 0,因此您可能需要使用

[fF][eE][bB] (?:[1-2][0-9]|[1-9])
                            ^

相反。

现在,如果您使用 re.IGNORECASE (使正则表达式匹配大写和小写字符),并且如果您使用循环读取文件内容(此对于大文件更有效)。此外,原始正则表达式模式也是一个很好的做法:

with open(sys.argv[1], 'r') as textFile:
    for line in textFile:
        matches = re.match(r"feb (?:[1-2][0-9]|[1-9])", line, re.IGNORECASE)
        if matches:
            print matches.group()

当然,如果您最后需要一个列表,您也可以将匹配项放入列表中。

关于python - 正则表达式 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21473665/

相关文章:

python - 让 python 应用程序访问存储在 Windows 证书管理器中的证书

python - 使用价格通用解决方案从字符串中删除货币符号和文字

python - 忽略与正则表达式不完全匹配的字符串?

regex - PostgreSQL - 查询所有重复数字相同的多位数字(repdigit, "Schnapszahl")

python - 将一个 x 位二进制数切割成一个字节(8 位)

python - 列表的列表..列表的列表?应用正则表达式和 nltk

python - 为什么 Upstart 不能运行 'source bin/activate' ?

python - 限制访问 Django 中的私有(private)文件下载

javascript - 用一个连字符替换单词之间的连续空格

r - 如何在 R 中使用正则表达式匹配并包含条件?