出现特定数字和单词时的正则表达式匹配

Regular expression match when specific digits AND words appear

我对正则表达式很陌生,正在处理我希望同时满足两个条件的字符串验证。我正在匹配包含以 4 或 7 开头的 7 位数字的文本 + 字符串需要包含提供的单词之一。

到目前为止我管理的内容:

\b((4|7)\d{6})\b|(\border|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)

上面的正则表达式正确地找到了数字,但是单词在 OR 语句之后,我需要遵循 AND 逻辑。

你能帮我实现一个可以作为数字和单词之间的 AND 语句的更改吗?

默认情况下,正则表达式中的所有内容都是 AND 如果你这样做 美国广播公司, 它的意思是“a”和“b”和“c” 所以在 regex

中不需要 AND

只需删除 |在数字匹配和单词之间

\b(4|7)\d{6}(border|Order|Bestellung|bestellung|commande|Commande|ordine|Ordine|objednavku|Objednavku|objednavka|Objednavka)\b

我假设第一个单词 \border 的反斜杠是一个错误。 这可以匹配如下内容:“4958374border”

您可以使用

(?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 - 以 47.
  • 开头的 7 位数字作为一个完整的单词

不要忘记使用原始字符串文字在 Python 代码中定义正则表达式:

pattern = r'(?si)^(?=.*\b(?:order|bestellung|commande|ordine|objednavk[ua])\b).*\b([47]\d{6})\b'