我为正则表达式问题道歉但是......
我正在开发一个用于抓取职称的正则表达式。
职务名称将始终采用以下格式:
职位名称:Word1 Word2(可选Word3)
我目前有这个:
Job Title: ([A-Z\w]+ [A-Z\w]+)|Job Title: ([A-Z\w]+ [A-Z\w]+ [A-Z\w]+)
我试图让它与两个或三个单词的职位相匹配,管道角色的每一面都单独工作(左侧匹配2个字的职称,右侧匹配3个字的职称),但是当我添加管道字符时,它只适用于左半部分,匹配2个字的职称。
有没有人知道我做错了什么?
注意:我使用Regexper来表达我的表情,看起来是正确的。
干杯。
答案 0 :(得分:1)
原因是左侧部分可以匹配正确的替代方案可以匹配的相同子字符串(在相同位置),并且模式未锚定。您需要锚定它,或交换备选方案。或使用可选组。这是一个增强版本:
Job Title: ([A-Z]\w* [A-Z]\w*(?: [A-Z]\w*)?)
^^^^^^^^^^^^^^
请参阅regex demo
如果您不在乎初始字母是小写还是大写,请添加/i
不区分大小写的修饰符(或相应的标记(如re.I
,RegexOptions.IgnoreCase
等) 。)取决于正则表达式的风味):
/Job Title: ([A-Z]\w* [A-Z]\w*(?: [A-Z]\w*)?)/i
由于[A-Z\w]+
与\w
匹配A-Z
毫无意义,我建议使用[A-Z]\w*
- 大写的ASCII字母后跟零个或多个字母数字/下划线字符。
非捕获组(?: [A-Z]\w*)
是可选的(此部分可能在输入中丢失),因为它使用?
量词来量化,这意味着一次或零次
答案 1 :(得分:0)