如何解决出现特定数字和单词时,正则表达式匹配
我对正则表达式很陌生,致力于字符串验证,我希望同时满足这两个条件。我正在匹配包含以 4 或 7 开头的 7 位数字的文本 + 字符串需要包含提供的单词之一。
到目前为止我所做的:
\b((4|7)\d{6})\b|(\border|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)
上面的正则表达式正确地找到了数字,但单词在 OR 语句之后,我需要遵循 AND 逻辑。
你能帮我实现一个可以作为数字和单词之间的 AND 语句的更改吗?
解决方法
你可以使用
(?s)^(?=.*\b(?:order|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)\b).*\b([47]\d{6})\b
如果您可以并且想要使用与 re.I
不区分大小写的匹配,您可以使用
(?si)^(?=.*\b(?:order|bestellung|commande|ordine|objednavk[ua])\b).*\b([47]\d{6})\b
参见regex demo。
匹配
-
^
- 字符串的开始 -
(?=.*\b(?:order|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)\b)
- 匹配任意零个或多个字符的正向预测,尽可能多,最多匹配组中列出的所有单词 -
.*
- 零个或多个字符,尽可能多 -
\b([47]\d{6})\b
- 以4
或7
开头的 7 位数字作为整个单词。
不要忘记使用原始字符串文字在 Python 代码中定义正则表达式:
pattern = r'(?si)^(?=.*\b(?:order|bestellung|commande|ordine|objednavk[ua])\b).*\b([47]\d{6})\b'
,
默认情况下,正则表达式中的所有内容都是 AND 如果你这样做 美国广播公司, 它的意思是“a”和“b”和“c” 所以在正则表达式中不需要 AND
只需删除 |数字匹配和单词之间
\b(4|7)\d{6}(border|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)\b
我认为第一个单词 \border 的反斜杠是错误的。 这可以匹配以下内容:“4958374border”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。