在我类似Markdown的文本中,我想用emdash实体完全替换三个破折号(---
),但是我不想替换四个破折号。
我该如何将其写为正则表达式?
我尝试了这个:
String input = "--- This---example----and--another.---";
String expected = "— This—example----and--another.—";
assertEquals(expected, input.replaceAll("-{3}", "—"));
但这给了我:
—这个例子,另一个。
而不是我想要的:
—这个例子和另一个。
我希望它在行的开头或结尾出现三个破折号或周围有任何字符(破折号除外)时起作用(即不只是被字母数字包围。
最佳答案
使用环顾四周以确保仅匹配3个破折号:
input.replaceAll("(?<!-)-{3}(?!-)", "—")
请参见regex demo
一旦
(?<!-)
在3个破折号之前,-
负向后看将使匹配失败,如果在3个破折号后有(?!-)
,则-
负向后视将使匹配失败。