python - 使用正则表达式排除字符串搜索中的字符?

标签 python regex string

我正在使用 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/

相关文章:

python - 在 matplotlib 中绘制列表/数组的散点图

c++ - 修改正则表达式以包含逗号

JavaScript 正则表达式 : dynamic capture group

java - 在不使用 arraylist 的情况下使用 compareTo 在 Java 上排序

java - 如何在没有连续分隔符空格的情况下拆分字符串

python - session.pop() 不清除 cookie

python - 创建 CA 证书 (.pem) 文件以连接到 crate 数据库

python - 为什么 pymunk 终止?

正则表达式匹配由分号分隔的唯一数字

Java - 从.text文件中查找匹配的字符串