我有一個包含輸入欄位中的一些名稱的串列,這些名稱都滿足以下正則運算式中的條件:
^([A-Za-z']*) $|^([A-Za-z']*[ |-]?[A-Za-z]*) $
BUONAROTTI SIMONI
DALI我DOMENECH
尼采
O'COILEAIN AKA COLLINS
O'COILEAIN ALSO COLLINS
O'COILEAIN稱為COLLINS
O'COILEAIN又稱COLLINS
PAYNE-GAPOSCHKIN
圖盧茲-勞特累克,MONFA
凡艾克
但是,我需要識別包含字串中以下不需要的短語的串列中的名稱(不區分大小寫):
AKA, was, also, 也被稱為, 被稱為, 以前
我嘗試了以下正則運算式但沒有成功,我似乎無法理解正則Lookarounds運算式
^(?>!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )[A-Za-z']*) $|^(?>!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )[A-Za-z']*[ |-]?[A-Za-z]*) $
^[A-Za-z']*) (?>!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )$|^[A-Za-z']*[ |-]?[A-Za-z]*) (?>!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )$
^(?<!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )[A-Za-z']*) $|^(?<!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )[A-Za-z']*[ |-]?[A-Za-z]*) $
^[A-Za-z']*)(?<!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO ) $|^[A-Za-z']*[ |-]?[A-Za-z]*) (?<!( WAS )|( AKA )|( KNOWN AS )|( PREVIOUSLY )|( ALSO )$
請有人用環視(Lookahead 或 Lookbehind)指出我正確的方向。在此先感謝您的任何/所有建議。
uj5u.com熱心網友回復:
在您的模式中,^([A-Za-z']*) $|^([A-Za-z']*[ |-]?[A-Za-z]*) $所有部分都是可選的,因此它也可以匹配空字串。
您可以通過選擇性地重復第二部分并將至少 1 個或多個字符與使用的字符類匹配來省略其中一個交替
^[A-Za-z'] (?:[ -][A-Za-z] )*$
如果您想識別不需要的短語,則不需要環顧四周。您可以在可選部分之間匹配不需要的替代之一,只允許您在字符類中指定的字符。
|如果您不打算匹配管道字符,則可以從字符類中省略[ -]
^(?:[A-Za-z'] (?:[ -][A-Za-z] )* )?(?:AKA|was|Also(?: known as)?|Known as|Previously)(?: [A-Za-z'] (?:[ -][A-Za-z] )*)?$
正則運算式演示
另一種方法可能是使用否定前瞻排除匹配,僅在不存在替代方案時才允許匹配。
^(?!.*(?:AKA|was|Also(?: known as)?|Known as|Previously))[A-Za-z'] (?:[ -][A-Za-z] )*$
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396621.html
標籤:正则表达式
