我试图在所有情况下匹配一个连字符,除非它前面有空格并且由非空格继续。
x-y //match
x - y //match
x- y //match
x -y //not match
我希望正则表达式根据上述要求确定匹配,但只捕获负号。这可能吗?
谢谢!
编辑准确性。
答案 0 :(得分:4)
可以使用负面的lookbehind和一个积极的前瞻断言(docs):
(?<!\s)-|-(?=\s)
其中说:匹配任何连字符(不以空格开头)或(以空格开头)。根据{{3}},这与说“ not (以空格开头)和(由非空格开头)”相同。
答案 1 :(得分:0)
您可以使用多种替代方案,每种方案一种:
Pattern regex = Pattern.compile(
" (?<=\\S)-(?=\\S) # x-y //match\n" +
"| (?<=\\s)-(?=\\s) # x - y //match\n" +
"| (?<=\\S)-(?=\\s) # x- y //match",
Pattern.COMMENTS);
这种逻辑可能会缩短(以牺牲一些可读性为代价)。