我正在编写一个正则表达式,它将匹配以X开头的两段字段。如果第二段不以Y结尾,它将匹配两个段,但如果第二段结束时匹配第一段收率
例如,
XJohn.Doe -> matches XJohn.Doe
XJane.DoeY -> matches XJane (or XJane.)
ZJanie.Doe -> not match
到目前为止我所得到的是
X[A-z]+?\.[A-z]+(?<!Y)$
与 XJane.DoeY 完全不匹配,或
X[A-z]+?\.[A-z]+(?<!Y)
匹配 XJane.Doe 。
如何修改正则表达式,以便在匹配失败时,它会尝试仅匹配第一个段。
答案 0 :(得分:2)
您可以尝试下面的内容,
^X[A-Za-z]+\.(?:[A-Za-z]+(?<!Y)$|)
如果您想要匹配+
等字符串,请将X[A-Za-z]+
中的*
更改为X.X
。
<强>更新强>
^X[A-Za-z]+\.(?:[A-Za-z]+(?<![\WY])$|)
答案 1 :(得分:1)
您可以根据字边界使用此正则表达式:
\bX\w*\W+(?:\w*[^Y\W])?\b
编辑:根据以下评论,以下正则表达式可以正常工作:
\bX\w*(?:\W+\S*[^!\s](?=\s|$))?