regex 正则表达式的意外行为

8ftvxx2r  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(117)

我正在尝试编写一个解析器,使用正则表达式来检测参考书目脚注。但是一个特定的RE不工作,我不知道为什么。下面是我隔离问题的代码。

import re
PATTERN = "[\\w ]+, [\\w ]+, (\\d+(\\-\\d+)?)\\."

match_A = re.search(PATTERN, "Author, Some Book, 51–66.")
match_B = re.search(PATTERN, "Author, Some Book, 60-61.")

print(match_A != None)
print(match_B != None)

SUB_PATTERN = "\\d+(\\-\\d+)?"

match_C = re.search(SUB_PATTERN, "51–66")
match_D = re.search(SUB_PATTERN, "60–61")

print(match_C != None)
print(match_D != None)

结果是:

False
True
True
True

但是我期望获得所有的True。谁能重现这个问题,或者解释一下我身上发生了什么?
我正在Windows 10上工作。我的Python版本:

Python 3.11.1 (tags/v3.11.1:a7a450f, Dec  6 2022, 19:58:39) [MSC v.1934 64 bit (AMD64)] on win32
gzszwxb4

gzszwxb41#

你的破折号是不同的,第一个是“-”(“en破折号”),第二个是“-”(“连字符”)。如果你不相信我,谷歌每一个。你可以把他们放在一个字符类:

PATTERN = "[\\w ]+, [\\w ]+, (\\d+([–-]\\d+)?)\\."

相关问题