用感叹号代替字母之间的句号

时间:2018-07-10 11:17:11

标签: regex text replace

以某种方式,我得到的一些文本页面似乎在连字符应有的句号处出现了。

例如,“然后发生了。先是一只脚,然后是另一只脚。”如您所见,连字符应有一个句号。

我发现正则表达式可以“查找” ([a-z][.][a-z])所有出现的情况,但无法找出“替换”。

当我尝试[ - ][-][a-z][-][a-z][a-z][ - ][a-z][a-z][ ][-][ ][a-z]时,它会删除前一个单词的最后一个字母和第一个字母以下之一。

我正在使用文本编辑器(TextPad)。

我该如何解决?

3 个答案:

答案 0 :(得分:2)

考虑[.](?=[a-z])

  • 它确实避免了缩写(假设它们只是大写)。

  • 它不处理“ Then it happened.Winnie the Pooh looked up.”(连字符后的单词是专有名词。)

  • 它也不处理“ Then it happened.G.W. Bush looked up.”(连字符后面的单词是缩写)。

要处理这些情况,请考虑(?<![A-Z])[.](?!\s|$)

  • 它说.之前的字母不能大写。

  • 它还说在其后不应有空格或行尾。

您可以仅用" - "进行替换,因为正则表达式只占用句点。 (使用lookarounds来匹配上下文。)

See the demo

答案 1 :(得分:1)

我没有TextPad,也无法测试我的答案。据我了解,TextPad应该通过\1$1支持捕获组。请尝试以下其中之一

搜索([a-z])\.([a-z])并替换为\1 - \2

搜索([a-z])\.([a-z])并替换为$1 - $2

搜索\([a-z]\)\.\([a-z]\)并替换为\1 - \2

搜索\([a-z]\)\.\([a-z]\)并替换为$1 - $2

答案 2 :(得分:0)

您可以尝试这样

    var string = "Then it happened.first one foot.then the other."; 
    var result = string.replace(/[.]/g,'-');