Python - Unicode正则表达式匹配 - 如何搜索勾号? ✓

3

我正在尝试匹配包含勾号的行:✓

我正在使用Python3。

有关Unicode编码的详细信息,请参阅此处:https://codepoints.net/U+2713?lang=en

我要匹配的行看起来像这样:

✓ Chrome on MAC - MySite.com - version-1

re.match("✓", line) 不起作用。re.match("/u2713", line) 也不行。

我该如何确定 line 是否包含 ✓?

--- 更新 ---

解决了:显然,在 ✓ 前面有某种看不见的字符,这导致 match 运算符失败。感谢 @NickT 和 @EricDuminil 提供提示。此外,in 操作符似乎更容易和更安全,所以我将标记该答案为正确。


2
你可以尝试使用以下其中一个:ur"\u2713"ur"\x{2713}"ur"\u{2713}"ur"✓" - user557597
1
此外,请确保目标字符串已经编码为Unicode,即 target = ur"✓ Chrome on MAC - MySite.com - version-1" - user557597
2
该行是否以勾号开头?re.match仅匹配提供的字符串的开头,使用.search在字符串中任何位置查找(如果不需要通配符,则最好使用in)。 - Nick T
谢谢,@NickT,那就是我的问题。 - tadasajon
@NickT:让我最困扰的是re.match的名字并不暗示模式应该从哪里开始匹配。更加令人困惑的是:在Java中,它应该匹配整个字符串,在Python中,它应该从开头匹配,在Ruby中,它可以匹配任何位置。:-/ - Eric Duminil
显示剩余4条评论
3个回答

4

您甚至不需要使用任何正则表达式。您可以使用in 操作符

>>> "✓" in "✓ Chrome on MAC - MySite.com - version-1"
True
>>> "✓" in "Chrome on MAC - MySite.com - version-1"
False

如果您想显示在'marks.txt'文件中带有勾选标记的行,可以编写以下代码:
with open('marks.txt') as f:
    for line in f:
        if "✓" in line:
            print(line, end='')

2

为了确保无误,最好按名称指定字符:

>>> line = '✓ Chrome on MAC - MySite.com - version-1'
>>> re.match('\N{CHECK MARK}', line)
<_sre.SRE_Match object; span=(0, 1), match='✓'>

0
如何判断一行中是否包含 ✓?
示例:
import re


text = '''
123 456 789
✓ 123 456 789
123 456 789
123 456 ✓ 789
123 456 789
'''

for m in re.finditer('^.*✓.*$', text, re.MULTILINE):
    print('line:', m.group(0))

输出:

line: ✓ 123 456 789
line: 123 456 ✓ 789

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接