gpt4 book ai didi

python - 我如何编写 Python Regex 将采用 4 个数字后跟拼音字母值?示例 : 1 2 3 4 Alpha Bravo -> 1234AB

转载 作者:行者123 更新时间:2023-12-04 15:05:32 24 4
gpt4 key购买 nike

我正在使用以下脚本,以便 Rasa 框架在用户传递时检测到荷兰邮政编码:

https://medium.com/@naoko.reeves/rasa-regex-entity-extraction-317f047b28b6

荷兰邮政编码的格式是 1234 AB。这在使用正则表达式时效果很好,例如:

 [1-9][0-9]{3}[\s]?[a-z]{2}

但是,我现在正在尝试实现一个语音转文本功能(Azure 认知服务),该功能不太容易识别字母表。例如,“B”被选为“蜜蜂”。

我现在正在尝试更改正则表达式,以便用户可以说“1 2 3 4 Alpha Bravo”,然后正则表达式提取器将挑选出“1 2 3 4 A B”。

我试过像下面这样使用单词边界:

[1-9]*[\s]?[0-9]*[\s]?[0-9]*[\s]?[0-9]*[\s]?\b[a-zA-Z]

[1-9]\s[0-9\s]{5}\s?\b[a-zA-Z]

前者过于宽松,如果用户说“你好”,它将触发正则表达式提取器并将“HT”传递给邮政编码行为。

后者更严格,但我只能将 '1 2 3 4 Alpha Bravo' 匹配为 '1 2 3 4 A'。

我真的很感激任何关于如何解决这个问题的解决方案。如果这在 Regex 中不容易实现,我相信在链接的媒体文章中更改以下函数将获得我想要的结果。不幸的是,我不是 Python/Regex 专家 :)。

 def match_regex(self, message):
extracted = []
for d in self.regex_feature:
match = re.search(pattern=d['pattern'], string=message)
if match:
entity = {
"start": match.pos,
"end": match.endpos,
"value": match.group(),
"confidence": 1.0,
"entity": d['name'],
}
extracted.append(entity)
extracted = self.add_extractor_name(extracted)
return extracted

我希望这已经足够清楚了。

谢谢!

jack

最佳答案

您可以使用 3 组匹配数字之间和大写字符 A-Z 之间的可选空格。

([1-9](?:\s*[0-9]){3})\s?([A-Z])[a-z]*\s*([A-Z])[a-z]*

模式匹配

  • ([1-9](?:\s*[0-9]){3}) 用可选的空白字符匹配 4 位数字
  • \s? 匹配一个可选的空格
  • ([A-Z])[a-z]*\s* 匹配大写字符 A-Z,后跟可选的小写字符和可选的 whitespac
  • ([A-Z])[a-z]* 匹配大写字符 A-Z 后跟可选的小写字符

regex demo

一个更严格的选项可以匹配大写字符 A-Z 后跟相同字符的大写或小写变体,使用可选的重复反向引用

\b([1-9](?:\s*[0-9]){3})\s?([A-Z])(?i:\2*)\s*([A-Z])(?i:\3*)\b

Regex demo | Python demo

import re

pattern = r"\b([1-9](?:\s*[0-9]){3})\s?([A-Z])(?i:\2*)\s*([A-Z])(?i:\3*)\b"
strings = [
"1 2 3 4 Alpha Bravo",
"1234 Alpha Bravo",
"1234A Bbbbbbbc",
"1234Aaa Bbb",
"1234Aa Bbb",
"1234A BbbbbBbb"
]

for s in strings:
print(re.findall(pattern, s))

输出

[]
[]
[]
[('1234', 'A', 'B')]
[('1234', 'A', 'B')]
[('1234', 'A', 'B')]

关于python - 我如何编写 Python Regex 将采用 4 个数字后跟拼音字母值?示例 : 1 2 3 4 Alpha Bravo -> 1234AB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66226664/

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