这是我写的一个小正则表达式:
\\b(?!N|O)(?!Y{1}|N{1}).+_
这个正则表达式应该匹配以新行或空格开头的任何字符序列(因此\ b)不包括单词NOT和beinning中的字符Y或N
((?!N | O)(?!Y {1} | N {1}))并以下划线结束(因此_)。
我的问题是我希望它不情愿(我认为这是正确的术语)。含义: 在下一篇文章中:
FILE_sldkf aTEMP_sdlkf
它会以不同的方式匹配FILE和aTEMP,现在我得到了
FILE_sldkf aTEMP_
一起作为一场比赛。有任何想法吗?谢谢!
答案 0 :(得分:0)
我想你想要更像的东西:
\ B [^ NY]。*?_
这意味着:单词边界(\ b - 双重转义,就像你的代码一样),后跟一个N或Y以外的字符([^ NY] - 包括单词NOT)后跟任何字符(。)0或更多时间(*)贪婪(? - 不是不情愿)后跟下划线(_)
答案 1 :(得分:0)
\b[^NY\s](?!\w*NOT\w*)\w+?_
,我想这是你正在寻找的正则表达式..你应该为java添加一个转义字符..
示例;
FILE_sldkf_ aTEMP_sdlkf NOT_ NER_FG YER_ 343_4434_ FileNOT_ fil _
匹配:
FILE_ aTEMP 343_ fil _
答案 2 :(得分:0)
有时候最好单独检查异常,而不是将所有内容打包在一个正则表达式中。
因此我会做这样的事情(伪代码):
if (string matches "\\b(\\w+_)") then
matched = extract matched part for () group 1
if (matched not matches "^(N|Y|NOT)") then ...