修复字符串中格式错误的省略号
Fix malformed ellipses in a string
我想修复 String
.
中格式错误的省略号 (...
)
"Hello.. World.."
"Hello... World..." // this is correct
"Hello.... World...."
"Hello..... World....."
应全部更正为:
"Hello... World..."
以下正则表达式处理 3 个或更多 个连续 .
的任何实例:
line.replaceAll("\.{3,}", "...");
但是,我不知道如何处理 正好 2 个连续的 .
的情况。我们不能这样做:
line.replaceAll("\.{2}", "...");
例如,对于 "..."
,上面的代码将 return "......"
,因为正则表达式将替换前 2 个 .
(索引 0 和 1 ),然后是下 2 个 .
(索引 1 和 2),结果是 "..." + "..." = "......"
.
像这样的东西有效:
line.replaceAll("\.{2}", "...").replaceAll("\.{3,}", "...");
...但必须有更好的方法!
你可以通过否定来做到这一点,检测所有 不是 一个或多个单词后跟 "correct" 椭圆的所有内容,并使用正则表达式修复椭圆喜欢:
line.replaceAll("[^\w* ]+([.]{1,})", "...")
这样做的好处是除了畸形的省略号之外,不会替换其他标点符号。
您可以替换任意一组的两个或更多 .
:
[.]{2,}
和...
你想要像下面这样的东西(未转义的形式):
(?<!\.)\.{2}(?!\.)|\.{4,}
基本上,在两点的情况下,负lookbehind和lookahead被用来防止它们匹配三点序列。
为什么不保持简单?
\.\.+
如果您真的不希望它与 3 人一组混为一谈,那就是:
\.{4,}|(?<!\.)\.{2}(?!\.)
它的作用是首先查找大于 3 的组,然后查找 2 的组。“...”的特殊之处在于“...”中有 2 组“..” .所以在 (?!\.)
你寻找第三个“。”在第一个 2 之后。如果是第三个“。”存在然后丢弃该结果。这称为负先行。要丢弃第二个“..”,您必须执行负面回顾。所以 (?<!\.)
寻找那个“。”在第二个“..”之前,如果找到则丢弃此结果。
javascript 无法执行负面回顾,所以我使用了一个使用 Java 编译器的。
我想修复 String
.
...
)
"Hello.. World.."
"Hello... World..." // this is correct
"Hello.... World...."
"Hello..... World....."
应全部更正为:
"Hello... World..."
以下正则表达式处理 3 个或更多 个连续 .
的任何实例:
line.replaceAll("\.{3,}", "...");
但是,我不知道如何处理 正好 2 个连续的 .
的情况。我们不能这样做:
line.replaceAll("\.{2}", "...");
例如,对于 "..."
,上面的代码将 return "......"
,因为正则表达式将替换前 2 个 .
(索引 0 和 1 ),然后是下 2 个 .
(索引 1 和 2),结果是 "..." + "..." = "......"
.
像这样的东西有效:
line.replaceAll("\.{2}", "...").replaceAll("\.{3,}", "...");
...但必须有更好的方法!
你可以通过否定来做到这一点,检测所有 不是 一个或多个单词后跟 "correct" 椭圆的所有内容,并使用正则表达式修复椭圆喜欢:
line.replaceAll("[^\w* ]+([.]{1,})", "...")
这样做的好处是除了畸形的省略号之外,不会替换其他标点符号。
您可以替换任意一组的两个或更多 .
:
[.]{2,}
和...
你想要像下面这样的东西(未转义的形式):
(?<!\.)\.{2}(?!\.)|\.{4,}
基本上,在两点的情况下,负lookbehind和lookahead被用来防止它们匹配三点序列。
为什么不保持简单?
\.\.+
如果您真的不希望它与 3 人一组混为一谈,那就是:
\.{4,}|(?<!\.)\.{2}(?!\.)
它的作用是首先查找大于 3 的组,然后查找 2 的组。“...”的特殊之处在于“...”中有 2 组“..” .所以在 (?!\.)
你寻找第三个“。”在第一个 2 之后。如果是第三个“。”存在然后丢弃该结果。这称为负先行。要丢弃第二个“..”,您必须执行负面回顾。所以 (?<!\.)
寻找那个“。”在第二个“..”之前,如果找到则丢弃此结果。
javascript 无法执行负面回顾,所以我使用了一个使用 Java 编译器的。