我正在尝试在特定字符串(例如Token
)之前添加空格,将正则表达式替换为另一个正则表达式:somethingToken
应该变为something Token
但something Token
应该保留
something Token_
并不是
something Token
(有2个空格)
我找不到匹配非空格字符然后令牌的正则表达式但是在匹配中没有包含非空格字符(否则它也会被替换)。
一个(失败的)尝试是试图否定一个\b
锚(它应该匹配一个单词的开头),但我不知道我是否可以否定一个锚。
对此有任何帮助表示赞赏。
谢谢。
答案 0 :(得分:3)
我刚刚找到了答案,也许这对其他人有用:
\BToken
表示否定的单词边界,因此在标准单词边界(\ b)不匹配的地方基本匹配。对于我的示例,它确实匹配 somethingToken 但不是匹配的东西。
答案 1 :(得分:1)
在Java中,这可以通过以下方式实现:
final String text = "fooToken foo Token";
// Prints 'foo Token foo Token'
System.out.println(text.replaceAll("(?<=\\S)(?=Token)", " "));
这里的概念是lookbehind和lookahead。有关详细信息,请参阅Regex Tutorial - Lookahead and Lookbehind zero-width assertions。
答案 2 :(得分:0)
(?<!\u0020)(?=Token)
这将看到非空格的背后,然后将预测Token,但没有宽度。这样你可以用空格替换这个匹配。
编辑:如果你需要它在Javascript中工作,
\u0020?(?=Token)
使空格可选,然后用空格替换空格,无需净更改。