正则表达式-如何匹配单个字符同时排除两个字符?

时间:2018-12-21 00:12:30

标签: regex

在以下示例中,我尝试使用正则表达式匹配属性名称(“ SUP NR”,“ QUANTITY”,“ MOD / REF”):

  

SUP NR:K16518-1,数量:2件// MOD / REF:16-1P1-0612

注意:

  • 属性名称后总是带有':'字符
  • 属性可以由多个单词组成,可以用空格(“ SUP NR”)或/(“ MOD / REF”)隔开
  • 开头(在“ SUP NR”之前)有一个空格字符

我尝试使用以下正则表达式来做到这一点:

(?<=\s)[a-zA-Z\s/]+:

我使用(?<= \ s)负向后看,因为属性名称之前总是有一个'空格'。

如果不是用于双'//'字符,那当然会起作用,它当然与字符集中的'/'char匹配。有没有一种方法可以在字符集中仅包含单个'/'字符,而排除双'//'字符呢? (也许还有更优雅的方法吗?)

编辑: 请注意,属性也可能包含两个以上的单词。另外,选择的属性名称仅是示例,它也适用于其他名称。

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

\s([a-zA-Z]+(?:[/\s][a-zA-Z]+)*):

它将查找一个单词,该单词前面带有一个空格,然后是可选的分隔符组(空格或/),另一个单词是:。对于您的数据组1是SUP NRQUANTITYMOD/REF

Demo on regex101

使用python,您可以像这样使用此正则表达式:

import re
string = " SUP NR: K16518-1, QUANTITY: 2 PIECES// MOD/REF: 16-1P1-0612"
regex = re.compile('\s([a-zA-Z]+(?:[/\s][a-zA-Z]+)*):')
print regex.findall(string)

输出:

['SUP NR', 'QUANTITY', 'MOD/REF']

Demo on rextester

答案 1 :(得分:0)

您不需要后面的样子。您也可以更具体。

尝试一下:

[a-zA-Z]+([ /][a-zA-Z]+)*(?=:)

请参见live demo


顺便说一句,您背后的表情不是负面表情,而是正面表情-负面表情使用语法(?<!...)

相关问题