如何使用正则表达式(Python)匹配必须为字母,数字和斜杠的单词?

时间:2019-02-09 17:05:45

标签: python regex

我有这样的清单(只是一部分);

not match me
norme
16/02574/REMMAJ
20160721
17/00016/FULM
OUT/2017/1071
SMD/2017/0391
17/01090/FULM
2017/30597
17/03940/MAO
18/00076/FULM
CH/17/323
18/00840/OUTMEI
17/00902/EIAM
PL/2017/02671/MINFOT

我需要找到一般规则来匹配所有这些规则,但不匹配第一行(简单的单词),或者匹配\d\w中的任何一个(如果不相互混合并使用斜杠)。允许使用\d{8}之类的数字。

我不知道如何将适用于这3个组的MUST子句一起使用-都不能错过。

这些模式要么不完全匹配,要么匹配单词。尽可能使用简单的正则表达式。

\d{8}|(\w+|/+|\d+) \d{8}|[\w/\d]+

编辑

这很有趣,但是一些未提供的示例与建议的表达式不匹配。例如:

7/2018/4127 
NWB/18CM032

但是我知道为什么,这超出了范围。但是,为一组中的混合数字和字母添加功能,例如NWB/18CM032会很好,并且不会破坏我认为的先前想法。

1 个答案:

答案 0 :(得分:1)

您可以将大写字符或1-8位数字匹配1次或多次,并以正斜杠重复零次或多次:

^(?:[a-z0-9]+(?:/[a-z0-9]+)+|\d{8})$

这将匹配

  • ^字符串的开头
  • (?:非捕获组
    • [a-z0-9]+匹配字符a-z或数字1+次
    • (?:/[a-z0-9]+)+匹配/,后跟一个字符或数字1+次,并重复1+次。
    • |
    • \d{8}匹配8位数字
  • )关闭群组
  • $字符串结尾

regex101上查看