gpt4 book ai didi

python - 未能捕获第一个单词组

转载 作者:行者123 更新时间:2023-12-01 13:13:04 25 4
gpt4 key购买 nike

我正在尝试为以下可能的情况编写正则表达式。我使用 re.finditer()re.IGNORECASE 来匹配字符串。可能的情况和对应的匹配是

  1. 'vessel eta: 12-10-19' 应与 'vessel eta: '
  2. 匹配
  3. 'vessel eta 12-10-19' 应与 'vessel eta '
  4. 匹配
  5. 'etd eta : 12/10/19' 应与 'etd eta '
  6. 匹配
  7. 'eta SIN: 12/10/19' 应该匹配 'eta SIN:'
  8. 'eta : 12-10-19 应该匹配 'eta :'
  9. 'eta: 12-10-19' 应与 'eta: '
  10. 匹配
  11. 'eta. 12-10-19' 应与 'eta 匹配。 '
  12. 'eta 12-10-19' 应与 'eta '
  13. 匹配

到现在为止,我是这样写的:

((vessel)|(ETD))?(\s\.\:)?(ETA)[\s\.\:]{1,3}?(SIN)?[\s\.\:]?

但根据 regex101 , 这与除前三种情况外的所有情况匹配,其中第一个单词(无论是 'vessel' 还是 'etd')未被捕获。

我的正则表达式有什么问题?

最佳答案

(\s\.\:)? 模式匹配一个可选的序列,一个空格,一个点,然后是一个冒号,而你想匹配一个可选字符、空格、.:.

请注意,您在字符类中对字符进行了过度转义:[.] 始终匹配一个点并且 : 不是特殊的正则表达式元字符。

建议使用non-capturing groups ((?:...)) 如果您不需要进一步访问正则表达式匹配的部分,或者在分组括号不包含替代项或未量化时完全删除它们。

你可以使用

(?:vessel|ETD)?[\s.:]?ETA[\s.:]{1,3}?(?:SIN)?[\s.:]?

参见 regex demo .

关于python - 未能捕获第一个单词组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815836/

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