我的正则表达式是
(?<=signed( out)?( by)?( resident)?( by resident)?( out by)?)[:]? \S+
我的示例字符串是
1) ***Signed Out*** name name n,
2) signed by resident: name
3) signed by:name name
4) Signed Out By name, name p.
自从我使用以来我一直在期待?&lt; =该组中的所有内容都不匹配,但我发现匹配中包含了一些子表达式
例如,为每个字符串排除的部分只是字符串'signed'但是我还希望从匹配中排除'out','by resident''by'或'out by'如果它们发生字符串签名后。
答案 0 :(得分:1)
为什么不忘记lookbehinds而是使用匹配的组只为你想要的部分(最后的名称)。请参阅regex101上的此示例:
[*]*signed(?: out)?(?: by)?(?: resident)?[*]*:? *(.*)
除了从外观到非捕捉组的变化之外,以下是我所做的其他更正:
\S+
匹配,因为它可能包含空格和逗号答案 1 :(得分:0)
如下所示更改正则表达式。
(?<=signed(?:(?: out)?(?: by)?|by resident)?[:]?\s*)\w+