我试图使用正则表达式来匹配空格分隔的数字。 我找不到\b(“单词边界”)的精确定义。 我假设-12将是一个“整数词”(与\b\-?\d+\b匹配),但这似乎不起作用。如果能知道方法,我将不胜感激。

[我在Java 1.6中使用Java正则表达式]

例子:

Pattern pattern = Pattern.compile("\\s*\\b\\-?\\d+\\s*");
String plus = " 12 ";
System.out.println(""+pattern.matcher(plus).matches());

String minus = " -12 ";
System.out.println(""+pattern.matcher(minus).matches());

pattern = Pattern.compile("\\s*\\-?\\d+\\s*");
System.out.println(""+pattern.matcher(minus).matches());

这将返回:

true
false
true

当前回答

当您使用\\b(\\w+)+\\b时,这表示与只包含单词字符的单词完全匹配([a- za - z0 -9])

例如,在regex开头设置\\b将接受-12(带空格),但同样不接受-12(不带空格)

供参考支持我的话:https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html

其他回答

参考:精通正则表达式(Jeffrey E.F. Friedl) - O'Reilly

\b等价于(?<!\w)(?=\w)|(?<=\w)(?!\w)

当您使用\\b(\\w+)+\\b时,这表示与只包含单词字符的单词完全匹配([a- za - z0 -9])

例如,在regex开头设置\\b将接受-12(带空格),但同样不接受-12(不带空格)

供参考支持我的话:https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html

我想解释一下艾伦·摩尔的答案

字边界是一个位置,它前面有一个字字符而后面没有一个字字符,或者后面有一个字字符而前面没有一个字字符。

假设我有一个字符串“This is a cat, and she's awesome”,我想替换所有出现的字母“a”,只要这个字母('a')存在于“一个单词的边界”,

换句话说,“cat”里面的字母a不应该被替换。

所以我将执行regex(在Python中)为

re.sub(r"\ba","e", myString.strip()) //用e替换a

因此,

输入;输出

这是一只猫,她很棒

这是猫的结尾,她很恶心

单词边界\b用于一个单词应该是单词字符,而另一个单词应该是非单词字符。 正则表达式应为负数

--?\b\d+\b

检查工作演示

我认为它是最后一个匹配或字符串的开始或结束的边界(即字符跟随)。