在类似Markdown的文字中,我想用emdash实体替换三个短划线(---
),但我不想替换四个破折号。
如何将其写为正则表达式?
我试过了:
String input = "--- This---example----and--another.---";
String expected = "— This—example----and--another.—";
assertEquals(expected, input.replaceAll("-{3}", "—"));
但它给了我:
— This—example—-and--another.—
而不是我想要的:
— This—example----and--another.—
我想让它在一行的开头或结尾出现三个短划线或任何周围的字符(除了破折号)-i.e时工作。不仅仅是在被字母数字包围的时候。
答案 0 :(得分:6)
使用lookarounds确保只匹配3个破折号:
input.replaceAll("(?<!-)-{3}(?!-)", "—")
请参阅regex demo
(?<!-)
否定后瞻一旦{3}破折前-
,(?!-)
负前瞻如果在3个短划线之后有-
,则会使比赛失败。
答案 1 :(得分:-1)
你可以告诉它3个破折号周围的角色不能再是另一个角色:
replaceAll("[^-]-{3}[^-]", ...)