在Python中转义regex unicode字符串

2024-05-16 20:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户定义的字符串。 用撇号代替三个撇号来搜索。 例如

APOSTROPHES = re.escape('\'\u2019\u02bc')
word = re.escape("п'ять")
word = ''.join([s if s not in APOSTROPHES else '[%s]' % APOSTROPHES for s in word])

它适用于拉丁语,但对于unicode list comprehension给出了以下字符串: "[\\'\\\\u2019\\\\u02bc]\xd0[\\'\\\\u2019\\\\u02bc]\xbf[\\'\\\\u2019\\\\u02bc][\\'\\\\u2019\\\\u02bc][\\'\\\\u2019\\\\u02bc]\xd1[\\'\\\\u2019\\\\u02bc]\x8f[\\'\\\\u2019\\\\u02bc]\xd1[\\'\\\\u2019\\\\u02bc]\x82[\\'\\\\u2019\\\\u02bc]\xd1[\\'\\\\u2019\\\\u02bc]\x8c"

看起来它在两个字符串中都找到了反斜杠,然后替换了撇号

另外,print(list(w for w in APOSTROPHES))给出{}。在

我怎样才能避免呢?我想得到"\п[\'\u2019\u02bc]\я\т\ь"


Tags: 字符串用户inreforif定义list
1条回答
网友
1楼 · 发布于 2024-05-16 20:03:27

我的理解是:您想要创建一个正则表达式,它可以将给定单词与任何撇号匹配:

可以在组中定义匹配任何撇号的正则表达式:

APOSTROPHES_REGEX = r'[\'\u2019\u02bc]'

例如,你有这个(乌克兰语?)包含单引号的单词:

^{pr2}$

编辑:如果您的单词包含另一种撇号,您可以将其规范化,如下所示:

word = re.sub(APOSTROPHES_REGEX , r"\'", word, flags=re.UNICODE)

要创建正则表达式,需要对这个字符串进行转义(因为在某些上下文中,它可能包含标点符号等特殊字符)。转义时,单引号“'”将替换为转义单引号,如:r“\”。在

您可以用撇号正则表达式替换r“\”:

import re
word_regex = re.escape(word)
word_regex = word_regex.replace(r'\'', APOSTROPHES_REGEX)

然后可以使用新的正则表达式将同一个单词与任何撇号匹配:

assert re.match(word_regex, "п'ять")  # '
assert re.match(word_regex, "п’ять")  # \u2019
assert re.match(word_regex, "пʼять")  # \u02bc

注意:不要忘记使用re.UNICODE标志,它将帮助您处理某些RegEx字符类,如r“\w”。在

相关问题 更多 >