我必须提到我仍然不明白正则表达式是如何工作的。请看下面的代码。
titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " ");
此处titleAndBodyContainer
是String
。但是,它取代了什么?完全停止?逗号?问号?
答案 0 :(得分:4)
它用空格替换后跟空格或输入结尾的点。
| dot (double-escaped)
| | look ahead non-capturing group
| | | whitespace (double-escaped)
| | | | or
| | | || end of input ("$")
\\.(?=\\s|$)
检查API here。
答案 1 :(得分:1)
图片来自: Regexper.com http://www.regexper.com/#\.%28%3F%3D\s|%24%29
示例:
System.out.println("Hello. ".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println("Hello.".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(".".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(". ".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(".com".replaceAll("\\.(?=\\s|$)", "_"));
System.out.println(". Hi".replaceAll("\\.(?=\\s|$)", "_"));
输出是:
Hello_ //there is a space after Hello_
Hello_//no space this time
_
_ //again, space after _
.com
_ Hi
重要的是不消耗空白字符或行尾字符。它们仅用于检查匹配,但不替换。这就是为什么在第一个例子中"Hello. "
导致"Hello_ "
而不只是"Hello_"
答案 2 :(得分:0)
在您的代码中,它用空格(.
)替换所有点()。但有条件。点必须在白色空间之前或在行尾。
例如:
alex is dead. and alive.dead
alex is dead.
在上面的两个例子中,它只会替换dead
之后的点,因为它有空格或行尾。
答案 3 :(得分:0)
它用空格替换点后跟空格字符\t\n\x0B\f\r
或end of line
或end of input
答案 4 :(得分:0)
titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " ");
这匹配一个点(.
)后跟一个空格或字符串的结尾,并用空格替换它。
如果您想要替换?/()
,也可以尝试以下内容:
titleAndBodyContainer = titleAndBodyContainer.replaceAll("[\\.\\?\\/\\(\\)](?=\\s|$)", " ");