我正在使用 Python 2.7.2 脚本在我用作主单词列表的文本文件中查找单词列表。
我在终端窗口中调用脚本,输入任意数量的正则表达式,然后运行脚本。
因此,如果我传入两个正则表达式“^.....$”和“.*z”,它将打印包含至少一个“z”的每五个字母的单词。
我想要做的是添加另一个正则表达式以从字符串中排除一个字符。我想打印出所有有五个字母的单词,一个“z”,但-不是-一个“y”。
代码如下:
import re
import sys
def read_file_to_set(filename):
words = None
with open(filename) as f:
words = [word.lower() for word in f.readlines()]
return set(words)
def matches_all(word, regexes):
for regex in regexes:
if not regex.search(word):
return False
return True
if len(sys.argv) < 3:
print "Needs a source dictionary and a series of regular expressions"
else:
source = read_file_to_set(sys.argv[1])
regexes = [re.compile(arg, re.IGNORECASE)
for arg in sys.argv[2:]]
for word in sorted(source):
if matches_all(word.rstrip(), regexes):
print word,
我可以在传递给程序的正则表达式上添加哪些修饰符,以允许我从它打印的字符串中排除某些字符?
如果那不可能,需要在代码中实现什么?
最佳答案
指定一个不匹配的字符是这样完成的(这匹配除小写字母以外的任何内容):
[^a-z]
因此要匹配不包含“y”的字符串,正则表达式为:^[^y]*$
逐字解释:
^
如果出现在正则表达式的开头,则表示“开始”。
同样,如果 $
出现在最后,则表示“结束”。
[abAB]
匹配范围内或范围内的任何字符。例如,匹配任何十六进制字符(大写或小写):[a-fA-F0-9]
*
表示 0 个或多个前面的表达式。
作为[]
中的第一个字符,^
具有不同的含义:表示“不”。所以 [^a-fA-F0-9]
匹配任何非十六进制字符。
当你在 ^
和 $
之间放置一个模式时,你强制正则表达式与字符串完全匹配(模式之前或之后没有任何内容)。结合所有这些事实:
^[^y]*$
表示 正好是 0 个或多个不是“y”的字符的字符串。 (要做一些更有趣的事情,您可以检查非数字:^[^0-9]$
关于python - 使用正则表达式排除字符串搜索中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924705/