让我使用英语字符集作为示例,尽管问题实际上是如何使该方法适用于任何语言的字符集。
我想编写一个正则表达式,匹配集合 (a-zA-Z) 中的两个字符,除了某些特定字母。对于英语,假设异常(exception)列表是:任何 CIKMOV 或其小写 cikmov。
虽然对于英文字符集我可以写如下:
mo = re.search(r"[ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}", s)
它并不紧凑,更重要的是需要我了解该语言的字符集,以便我可以枚举子集。但我只获得了每种语言的异常(exception)列表,并且并不了解所有语言。
当然,以下内容对我不起作用:
mo = re.search(r"[^cikmovCIKMOV]{2}", s)
因为它仅排除异常(exception)列表,但包括其他所有内容(包括不在语言集中的字符)。
是否有比上述指定字符子集以消除异常的繁琐方法更好的编写正则表达式的方法?
选择的语言是动态输入(因此不仅限于英语/en-us),每种语言的异常(exception)情况指定如下:
exceptionlist["en-us"] = "cikmovCIKMOV"
exceptionlist["de-de"] =
编辑: 我不认为这是 how to match all alphabet except few 的重复项。这个问题假设我知道一种语言的“a”和“z”。但这里我所拥有的只是一种语言的异常(exception)列表。
最佳答案
是不是很容易搭建呢?喜欢:
availablelist["en-us"] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
exceptionlist["en-us"] = "cikmovCIKMOV"
regexes["en-us"] = re.compile(f"[{"".join([char in availablelist["en-us"] if char not in exceptionlist["en-us"]])}]")
您可以预编译您需要的每个正则表达式。
关于python - 正则表达式:如何匹配语言的字符集(有一些异常(exception))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292234/