在以下示例中,我尝试使用正则表达式匹配属性名称(“ SUP NR”,“ QUANTITY”,“ MOD / REF”):
SUP NR:K16518-1,数量:2件// MOD / REF:16-1P1-0612
注意:
我尝试使用以下正则表达式来做到这一点:
(?<=\s)[a-zA-Z\s/]+:
我使用(?<= \ s)负向后看,因为属性名称之前总是有一个'空格'。
如果不是用于双'//'字符,那当然会起作用,它当然与字符集中的'/'char匹配。有没有一种方法可以在字符集中仅包含单个'/'字符,而排除双'//'字符呢? (也许还有更优雅的方法吗?)
编辑: 请注意,属性也可能包含两个以上的单词。另外,选择的属性名称仅是示例,它也适用于其他名称。
答案 0 :(得分:1)
您可以使用此正则表达式:
\s([a-zA-Z]+(?:[/\s][a-zA-Z]+)*):
它将查找一个单词,该单词前面带有一个空格,然后是可选的分隔符组(空格或/
),另一个单词是:
。对于您的数据组1是SUP NR
,QUANTITY
和MOD/REF
。
使用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']
答案 1 :(得分:0)
您不需要后面的样子。您也可以更具体。
尝试一下:
[a-zA-Z]+([ /][a-zA-Z]+)*(?=:)
请参见live demo。
顺便说一句,您背后的表情不是负面表情,而是正面表情-负面表情使用语法(?<!...)