我有以下正则表达式
in = in.replaceAll(" d+\n", "");
我想用它来摆脱行尾的“d”
But I just won't do that d
<i>I just won't do that</i> d
No, no-no-no, no, no d
我的正则表达式in = in.replaceAll(" d+\n", "");
答案 0 :(得分:5)
很可能您的行不仅与\n
分开,而是与\r\n
分开。您可以尝试使用\r?\n
在\r
之前选择添加\n
。让我们也不要忘记它之后没有任何行分隔符的最后b
。要处理它,您需要在正则表达式中添加$
,这意味着代表数据结束的锚点。所以你的最终模式看起来像
in.replaceAll(" d+(\r?\n|$)", "")
如果您不想删除这些行分隔符,可以使用带有MULTILINE
标记$
的“行尾锚点”(?m)
代替
in.replaceAll("(?m) d+$", "")
特别是因为在b
之后没有行分隔符。
在Java中,当指定MULTILINE
标志时,$
将匹配空字符串:
"\r\n"
)'\n'
)没有回车('\r'
)就在前面'\r'
)'\u0085'
)'\u2028'
)'\u2029'
)当UNIX_LINES
标志与MULTILINE
标志一起指定时,$
将匹配换行符('\n'
)之前或字符串末尾的空字符串。
无论如何,如果有可能don't use regex with HTML
。
答案 1 :(得分:2)
正如Pshemo在他的answer中所述,您的字符串很可能包含Windows样式的换行符,这些字符为\r\n
而不是\n
。
你可以修改你的正则表达式来解释换行符(加上字符串以d
结尾而没有换行符的情况)和代码:
in = in.replaceAll("(d+(?=\r\n)|d+(?=\n)|d+$)","");
此正则表达式将删除与d+
后跟\r\n
,d+
后跟\n
或d+$
(任何d
之前匹配的所有内容字符串的结尾)。
(d+(?=\r\n)|d+(?=\n)|d+$)