Regex 正则表达式-如何在一行中排除两个字符的同时匹配单个字符?

Regex 正则表达式-如何在一行中排除两个字符的同时匹配单个字符?,regex,Regex,我试图使用正则表达式匹配以下示例中的属性名称(“SUP NR”、“QUANTITY”、“MOD/REF”): 辅助编号:K16518-1,数量:2件//型号/参考号:16-1P1-0612 注: 属性名称后面始终跟有“:”字符 属性可以由多个单词组成,可以用空格(“SUP-NR”)分隔,也可以用/(“MOD/REF”)分隔 开头有一个空格字符(在“SUP NR”之前) 我尝试使用以下正则表达式执行此操作: (?<=\s)[a-zA-Z\s/]+: (?您可以使用此正则表达式: \s(

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

辅助编号:K16518-1,数量:2件//型号/参考号:16-1P1-0612

注:

  • 属性名称后面始终跟有“:”字符
  • 属性可以由多个单词组成,可以用空格(“SUP-NR”)分隔,也可以用/(“MOD/REF”)分隔
  • 开头有一个空格字符(在“SUP NR”之前)
我尝试使用以下正则表达式执行此操作:

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

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

\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']

你不需要背后看。你也可以更具体一些

试试这个:

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



顺便说一句,您的lookbehind不是消极的lookbehind,而是积极的lookbehind-消极的lookbehind使用语法
(?

这确实适用于regex101,但是当我在sublime或python中尝试它时(重新打包)它不起作用..原因可能是什么?@nkaenzig我添加了python代码,显示正则表达式工作正常。谢谢你的回答。你说得对,它在文章中的示例中起作用。但是当我在更大的数据集上运行它时,它会冻结(在sublime&python中发生)@nkaenzig您能找出它冻结在什么数据上吗?@nkaenzig我已经更新了正则表达式,以避免可能导致冻结问题的灾难性回溯。这只适用于只包含两个单词的属性名称。它还应该适用于包含更多单词的属性。@nkaenzig已修复(基本上将
更改为
*