如何在正则表达式中找到该行的结尾?

时间:2014-01-15 02:50:11

标签: java regex

我有以下正则表达式 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", "");

不准确

2 个答案:

答案 0 :(得分:5)

很可能您的行不仅与\n分开,而是与\r\n分开。您可以尝试使用\r?\n\r之前选择添加\n。让我们也不要忘记它之后没有任何行分隔符的最后b。要处理它,您需要在正则表达式中添加$,这意味着代表数据结束的锚点。所以你的最终模式看起来像

in.replaceAll(" d+(\r?\n|$)", "")

如果您不想删除这些行分隔符,可以使用带有MULTILINE标记$的“行尾锚点”(?m)代替

等行分隔符
in.replaceAll("(?m) d+$", "")

特别是因为在b之后没有行分隔符。


在Java中,当指定MULTILINE标志时,$将匹配空字符串:

  • line terminator之前:
    • 回车符后面紧跟换行符("\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\nd+后跟\nd+$(任何d之前匹配的所有内容字符串的结尾)。

(d+(?=\r\n)|d+(?=\n)|d+$)

Regular expression visualization

Debuggex Demo