Java 修复字符串中格式错误的椭圆
我想修复Java 修复字符串中格式错误的椭圆,java,regex,string,Java,Regex,String,我想修复字符串中格式错误的省略号(…) "Hello.. World.." "Hello... World..." // this is correct "Hello.... World...." "Hello..... World....." 所有这些都应更正为: "Hello... World..." 以下正则表达式处理3个或更多连续的任何实例: line.replaceAll("\\.{3,}", "..."); 然而,我不知道如何处理这种情况,当正好有两个连续的。我们不能
字符串中格式错误的省略号(…
)
"Hello.. World.."
"Hello... World..." // this is correct
"Hello.... World...."
"Hello..... World....."
所有这些都应更正为:
"Hello... World..."
以下正则表达式处理3个或更多连续
的任何实例:
line.replaceAll("\\.{3,}", "...");
然而,我不知道如何处理这种情况,当正好有两个连续的
。我们不能这样做:
line.replaceAll("\\.{2}", "...");
例如,对于“…”
,上面的代码将返回“…”
,因为正则表达式将替换前2个
(索引0和1),然后替换下2个
(索引1和2),从而产生“…+”=“…”
类似这样的工作原理:
line.replaceAll("\\.{2}", "...").replaceAll("\\.{3,}", "...");
……但一定有更好的办法 您可以通过否定来实现,检测不是一个或多个单词后跟“正确”椭圆的所有内容,并使用正则表达式修复椭圆,如:
line.replaceAll("[^\\w* ]+([.]{1,})", "...")
这样做的优点是,除了格式错误的省略号外,不会替换其他标点符号 您可以替换两个或两个以上的
:
[.]{2,}
使用…
时,您需要以下内容(以未替换的形式):
(?
基本上,在两个点的情况下,使用负的lookback和lookahead来阻止它们匹配三个点的序列。为什么不保持简单
\.\.+
如果你真的不想让它和3人一组搞混,有这样一个:
\.{4,}|(?<!\.)\.{2}(?!\.)
\.{4,}|(?
它首先查找大于3的组,然后再查找2的组。关于“…”的特殊之处是“…”中有2组“…”。因此在(?!\)
中,您查找前2个之后的第3个“.”。如果第3个“.”存在,则放弃该结果。这称为负前瞻。放弃第2个“.”您必须执行负查找。因此,(?在第二个“.”之前查找该“.”。如果找到该结果,将丢弃该结果
javascript不能执行反向查找,所以我使用了一个使用Java编译器的
链接:仅用三个句点替换两个或多个句点?如何使用行.replaceAll(“\\.+”,“…”)
?这将用所需的,,,,,。
)序列替换任何点序列。这是一个“gimme-teh-codez”问题。应该关闭它。这很好,但用户必须记住,在创建Java字符串时,他们需要一个双转义字符,如字符串模式=“\\.\.+”;
\.{4,}|(?<!\.)\.{2}(?!\.)