gpt4 book ai didi

Python:无法匹配后跟分词符的句点(在非捕获组中)

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:31 24 4
gpt4 key购买 nike

我有一个像这样的正则表达式:r"credit\s+card\s+(?:numbers?|no[s\.]?)\b"。我想匹配像“信用卡号”这样的短语。 (包括期间)。但是,它目前只会匹配句点之前的短语部分。

>>> re.search(r"credit\s+card\s+(?:numbers?|no[s\.]?)\b", "credit card no.")
# <re.Match object; span=(0, 14), match='credit card no'>

这似乎与分词符 \b 有关(事实上 no 之间有分词符。:如果我删除 \b,可以匹配完整的短语:

>>> re.search(r"credit\s+card\s+(?:numbers?|no[s\.]?)", "credit card no.")
# <re.Match object; span=(0, 15), match='credit card no.'>

我想知道是否有一种方法可以修改正则表达式以使其捕获句点(当它实际出现在文本中时)。

编辑:更新了正则表达式以适应“数字”的单数和复数形式

可能的输入字符串可能是:

  • 信用卡号
  • 信用卡号
  • 信用卡号
  • 信用卡号
  • 信用卡号

我为“credit card no”包含了潜在误报匹配的词边界,因为它可以匹配像“credit card notification”这样的字符串而没有分词

最佳答案

您需要使用 \b 来断言单词的结尾,仅在单词字符之后:

r'credit\s+card\s+(?:numbers?\b|no(?:s\b|\b\.)?)'

参见 regex demo .

(?:numbers?|no[s\.]?)\b 变成 (?:numbers?\b|no(?:s\b|\b\.)?) 并匹配:

  • numbers?\b - numbernumbers 作为整个单词,不允许紧接在这些字符串右侧的单词字符<
  • | - 或者
  • no - no 子字符串后跟...
  • (?:s\b|\b\.)? - 可选的 1 次或 0 次出现:
    • s\b - s 后面没有跟单词 char
    • | - 或者
    • \b\. - 单词边界和一个点。

注意:如果您不想在.之后出现任何单词字符,请添加\B非单词边界,\b\. => \b\.\B.

关于Python:无法匹配后跟分词符的句点(在非捕获组中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com