在我类似Markdown的文本中,我想用emdash实体完全替换三个破折号(---),但是我不想替换四个破折号。

我该如何将其写为正则表达式?

我尝试了这个:

String input = "--- This---example----and--another.---";
String expected = "— This—example----and--another.—";
assertEquals(expected, input.replaceAll("-{3}", "—"));


但这给了我:

—这个例子,另一个。


而不是我想要的:

—这个例子和另一个。


我希望它在行的开头或结尾出现三个破折号或周围有任何字符(破折号除外)时起作用(即不只是被字母数字包围。

最佳答案

使用环顾四周以确保仅匹配3个破折号:

input.replaceAll("(?<!-)-{3}(?!-)", "&#8212;")


请参见regex demo

一旦(?<!-)在3个破折号之前,-负向后看将使匹配失败,如果在3个破折号后有(?!-),则-负向后视将使匹配失败。

10-07 19:00
查看更多