Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式将ascii与非ascii匹配?_Python_Regex - Fatal编程技术网

Python 如何使用正则表达式将ascii与非ascii匹配?

Python 如何使用正则表达式将ascii与非ascii匹配?,python,regex,Python,Regex,我有以下字符串变量 string1 = "cafe ceramique" string2 = "Café Céramique" 我想要一个与string1到string2匹配的正则表达式 以更一般的方式,如何将任何ascii字符串与具有常规表达式的非ascii字符串相匹配 import unicodedata string1 == unicodedata.normalize('NFKD', string2).encode('ASCII', 'ignore').decode('ascii')

我有以下字符串变量

string1 = "cafe ceramique"
string2 = "Café Céramique"
我想要一个与string1到string2匹配的正则表达式

以更一般的方式,如何将任何ascii字符串与具有常规表达式的非ascii字符串相匹配

import unicodedata
string1 == unicodedata.normalize('NFKD', string2).encode('ASCII', 'ignore').decode('ascii')

在你的例子中,单词的首字母是不同的大小写。是否要不区分大小写地匹配?

可以使用字符类和不区分大小写的修饰符:

rx = r'caf[eé]\ c[eé]ramique'
Python
中,完整的示例如下所示:

import re
string = """cafe ceramique
Café Céramique"""
rx = r'caf[eé]\ c[eé]ramique'
matches = re.findall(rx,string,re.IGNORECASE)
请参阅。

一般来说,
e
是与
é
è
è
完全不同的字符

到目前为止你尝试了什么?你有我们可以帮助你的方法吗?如果你想制作一个能找到这些实例的正则表达式,你可以像[cC]af[eé][cC][eé]ramique那样制作。你向regex解释你可以用大写字母或小写字母c和e或é,当然你可以让它更通用于更多的文本,但这是一个与您的问题完全匹配的答案。如果您忘记添加
解码
,比较结果仍将返回false,因为string1是小写,string2是大写的“C”,但效果与预期一致。我喜欢您的解决方案。只要添加
.lower()
,我想这正是OP所要求的,除非他被迫使用正则表达式。无论如何,我会支持你的答案这只适用于给定的示例和一般的非ascii文本。@RSingh:大多数正则表达式只适用于给定输入字符串的子集。。。