替换句号期间\\。与空间\\。空间

时间:2014-07-31 10:45:05

标签: java regex

如果它看起来像一个完整的停止期,我想分开一个完整的停止期。

我已解决的第一个问题是:

// space period if followed by Capital letter having spaces before or not.
original = original.replaceAll("\\.(\\s?[A-Z])", " . $1");

这将完美地完成以下情况: " Hello World。这是对特警队的测试。这是另一个短语。美国和欧盟以及英国都没有评论它。 http://a.a.br"

并做:" Hello World。这是特警队的测试。这是另一个短语。美国和欧盟以及英国都没有评论它。 http://a.a.br"

现在,注意到它分离了案例" Hello Word。这..."和#34; ...特警队。这是"。另请注意,它没有损坏URL。

然而它没有修复" ...评论它。 http://a.a.br"应该是" ...评论它。 http://a.a.br"但世界呢。之后是小写的http。"

现在,如果单词next有空格和小写,我希望它将其他句子分开,或者甚至是一个数字,前提是句点之前有一个小写字母。

所以案件:

1)"它。 HTTP"应该是"它。 HTTP" 2)"它。 12"应该是"它。 12"

现在必须在不损坏网址或电子邮件地址的情况下进行此操作。运行第一条规则" \。(\ s?[A-Z])"不会损坏电子邮件地址和网址。

此外,规则编号为1" \。(\ s?[A-Z])"是,如果在大写字母[A-Z]之前有换行符,而不是可选空格和大写字母,那该怎么办?

所以它是"这句话。\ n那句话。"它应该导致"这句话。 \ n那句话。"

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以按如下方式更新正则表达式以实现此目的:

original = original.replaceAll("\\.(\\s[A-Za-z0-9])", " .$1")

' \ s'匹配空白字符,所以应该能够处理' \ n'。 请参阅http://www.regular-expressions.info/shorthand.html

使用http://java-regex-tester.appspot.com/进行测试。

答案 1 :(得分:0)

   re.sub(r"(\w{2,})\.",r"\1 . ",x,re.DOTALL)

它在python中并适用于所有情况。

答案 2 :(得分:0)

根据您的要求:

  1. 空格期间如果之后是大写字母,则前面有空格 <或li>
  2. 空格句号如果后跟(空格和小写)或 (空格和数字)
  3. 可以输入如下:

    String test = "Hello World. This is a Test of the SWAT Team.Here's another phrase. Both USA and EU as well as UK have not commented it. http://a.a.br";    
    test = test.replaceAll("\\.((?:\\s?[A-Z])|(?: (?:[a-z]|\\d)))", " . $1");
    System.out.println(test);
    

    输出结果为:

    Hello World .  This is a Test of the SWAT Team . Here's another phrase .  Both USA and EU as well as UK have not commented it .  http://a.a.br