2011-06-14 57 views
2

我想一个特定的字符串(Token例如)通过与另一个替换正则表达式前添加一个空格:somethingToken应该成为something Tokensomething Token应该留 something Token_ 而不是 something Token(与2个空格)正则表达式锚否定的匹配和字符串

我很难找到一个匹配非空格字符,然后令牌的正则表达式,但不包括匹配的非空格字符(否则它将被替换)。 一个(失败)的尝试是试图否定一个\b锚点(它应该匹配单词的开头),但我不知道是否可以否定锚点。 对此的任何帮助表示赞赏。 谢谢。

+2

您正在使用哪种语言? – morja 2011-06-14 21:27:37

+0

我使用的是Java,但它应该尽可能地像语言不可知的那样。 – Eugen 2011-06-15 19:23:47

回答

3

我刚找到这个问题的答案,也许这将是对别人有用:

\BToken 

它代表一个否定词边界,所以基本上是匹配的地方标准字边界(\ b)不比赛。对于我的例子,它确实匹配somethingToken但不是东西令牌这是保持原样。

+0

那么你是如何决定让(令牌)原子的? (对于未来的读者)。显然你不想取代整个令牌,对吧? – 2011-06-14 21:48:29

+0

在我的情况下,我没有必要确定令牌是否是原子的(我确定它是基于我正在使用的文本类型)。但是如果您需要确定更通用的实用程序方法,则可以使用另一个字边界(此时不是否定的) - \ b。至于替换,是的,我确实想用“Token”替换“Token” – Eugen 2011-06-15 21:41:52

0

(?<!\u0020)(?=Token)

这将向后看一个非空格,然后将前瞻令牌,但没有宽度。这样你可以用空格替换这个匹配。

编辑︰如果你需要它在Javascript中工作, \u0020?(?=Token) 使空间可选,那么你将替换空间没有净变化。

+0

负向lookbehind语法是'(?<!pattern)'。 '(?!pattern)'是一个负面的前瞻。 – 2011-06-14 21:39:24

+0

谢谢!我会解决它。 – 2011-06-14 21:42:09