修复字符串中格式错误的椭圆

时间:2015-10-14 23:49:30

标签: java regex string

我想修复...中格式错误的省略号(String)。

"Hello.. World.."
"Hello... World..."     // this is correct
"Hello.... World...."
"Hello..... World....."

应全部更正为:

"Hello... World..."

以下正则表达式处理 3或更多连续.的任何实例:

line.replaceAll("\\.{3,}", "...");

然而,当正好2 连续.时,我不知道如何处理这种情况。我们做不到这样的事情:

line.replaceAll("\\.{2}", "...");

例如,对于"...",上面的代码将返回"......",因为正则表达式将替换前2个.(索引0和1),然后是下一个2 .的(索引1和2),结果为"..." + "..." = "......"

这样的工作:

line.replaceAll("\\.{2}", "...").replaceAll("\\.{3,}", "...");

......但必须有更好的方法!

4 个答案:

答案 0 :(得分:5)

您可以替换.中的两个或更多个组:

[.]{2,}

...

答案 1 :(得分:3)

为什么不保持简单?

var d = '[{"address":"10.0.35.118","cpus":4}]';
var sr = JSON.parse(d);

// Array of Object => List of Map
var is = Immutable.fromJS(sr);

console.log(sr);
console.log(is.toArray());

// Now its Array of Map
var list = is.valueSeq().toArray();

console.log(list);

list.forEach(function(item) {
  
  // Convert Map to Array
  console.log(item.toArray());
});

如果你真的不想让它与三人小组搞混,那就是:

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.min.js"></script>

这样做的目的是首先查找大于3的组,然后查找2组。关于“......”的特殊之处是“......”中有2组“..”。所以在\.\.+ 中你会寻找第三个“。”在第一个之后2.如果第三个“。”存在然后丢弃该结果。这称为负向前瞻。要丢弃第二个“......”,你必须执行负面的后视。所以\.{4,}|(?<!\.)\.{2}(?!\.) 寻找那个“。”在第二个“..”之前,如果找到则会丢弃此结果。

javascript无法执行负面的lookbehind,所以我使用了一个使用Java编译器。

链接:https://www.myregextester.com/?r=d41b2f7e

答案 2 :(得分:1)

你可以通过否定来检测,不是一个或多个单词后跟一个&#34;正确的&#34;椭圆,并使用正则表达式修复椭圆:

line.replaceAll("[^\\w* ]+([.]{1,})", "...")

这有利于不替换其他标点符号而不是格式错误的椭圆。

答案 3 :(得分:1)

你想要下面的东西(未转义形式):

(?<!\.)\.{2}(?!\.)|\.{4,}

Online examples

基本上,在双点情况下,使用负向后视和前瞻来阻止它们匹配三点序列。