Java Regex:用空格替换句号,或者如果它们是缩写的一部分则删除它们

时间:2010-10-18 06:34:10

标签: java regex

我有一系列文本字段,我需要清理所有句号。输入文本是公司名称,有时包含缩写,有时还有其他原因。

我想在文本是缩写时删除句号,否则,我想用空格替换它。我将缩写定义为一系列单个字母字符对,然后是句号。

示例输入和所需输出:
输入 - >期望的输出

U.K。 - >英国

E.U。 - > EU

bank.of - >银行

help.co.uk - >帮助我们

是否有人知道正则表达式或其他方法可以帮助我确定我希望删除而不是替换的句号?

感谢!!!

5 个答案:

答案 0 :(得分:2)

分两步完成:

var s = "U.K. bank.of help.co.uk E.U";

//replace periods in abbreviations
var r1 = new RegExp("\\b([A-Z])\\.", 'g');
s = s.replace(r1, "$1");
console.log(s);    //UK bank.of help.co.uk EU

//replace remaining spaces:
s = s.replace(/\./g, " ");
console.log(s); //UK bank of help co uk EU

给定的正则表达式是JavaScript;如果您需要帮助将它们翻译成Java,请发表评论。

答案 1 :(得分:0)

尝试

(?<=[^a-zA-Z][a-zA-Z])\.(?=[a-zA-Z][^a-zA-Z]| )

用于匹配缩写中的句号。

答案 2 :(得分:0)

您可以尝试匹配

之类的内容
^[\w.]+$

如果字符串匹配(假设它只有一个输入)那么它是一个缩写,如果不匹配那么它是由fullstops / periods分隔的一组单词。一定要剥去空白。或者您可以将其与

一起合并到正则表达式中
^\s*[\w.]+\s*$

这基本上说尽可能找到多对char和period。如果整个字符串(这是锚点^和$的用途)匹配它是一个缩写。

这个正则表达式将匹配英国,但不会匹配bank.co.uk甚至ba.u.k(因为两个字母在一起ba)。然后,您可以根据字符串是否与正则表达式匹配来处理每个案例,如果它的缩写然后替换“。”用“”如果没有,则替换“。”用“”。

答案 3 :(得分:0)

该解决方案完全有效!

String str="j.r. 20 lb jockey - j.d. pinkus j. d. choni j.d.d.";
removeInitialsDots(str);

功能:

private String removeInitialsDots(String str) {
    str=str.replaceAll("(?i)(^([a-z])\\.|(?<= )([a-z])\\.|(?<=\\.)([a-z])\\.)", "$2$3$4").trim();  
    str=str.replaceAll("(?i)^(([a-z]) ([a-z]))($| )", "$2$3"+SPACE).trim();
    str=str.replaceAll("(?i)(?<= )(([a-z]) ([a-z]))($| )", "$2$3"+SPACE).trim();
    return str;
}

说明:

(?i) - &gt;忽略大小写

(^([a-z])\。|(?&lt; =)([a-z])\。|(?&lt; = \。)([a-z])\。) - &gt; (首先在前面加上空格|前面有点)

^(([a-z])([a-z]))($ |) - &gt;在第一行:一个字符,空格,一个字符(行尾或空格)

(?&lt; =)(([a-z])([a-z]))($ |) - &gt;以空格开头:一个字符,空格,一个字符(行尾或空格)

$ 1 $ 2 ... - &gt;是我们想要的替换组,这些组是由括号按顺序定义的(不包括lookbehinds(?&lt; =))

答案 4 :(得分:0)

您可以尝试这样的事情:

inputString = inputString.replaceAll("\\.\\s+", " "); inputString = inputString.replaceAll("[^a-zA-Z0-9. ]", " ");

这会删除句号,但会在缩写甚至网址之间保留点。