微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

正则表达式,怎么在匹配一个英语句子时区分英

时间:2014-04-10 09:43  浏览:努力统计中...
正则表达式,我要匹配出一句英语句子,用下面的表达式: [^.?!]+? 匹配不为.?!(英语句号,问号,叹号等)的一个或多个字符,0个或多个空格。但这样存在一个问题,就是小数点如 t
正则表达式,我要匹配出一句英语句子,用下面的表达式:
[^.?!]+ ?

匹配不为 .?!  (英语句号,问号,叹号等)的一个或多个字符,0个或多个空格。但这样存在一个问题,就是小数点如
the price is 3.23$. 也会被当成英语句号,怎么修改正则表达示可以识别小数点?

需要能一句句取出句子,所以以 英语句号,问号,!来作为pattern识别,但是,我又需要区分小数点,不把它作为句号来断句。

小数点在 数字和$之后用这个区分。

小数点的一定能前后一定有数字的,那么英文的句号应该就是前面非数字,或者后面非数字的都算是句号了split("\\.\\D|\\D\\.");

楼主试下这个:
.+?(?:[!?]|$|(?:(?<!\d)\.(?!\d)))

上面的正则,我再改下,改成前面的空格也不匹配的
(?!\s).+?(?:[!?]|$|(?:(?<!\d)\.(?!\d)))

下面给个Demo:

import java.util.regex.*;

public class TestTmp {

public static void main(String[] args) {
String str = "How are u? I am fine! My father was a self-taught mandolin player. He was one of the best string instrument players in our town. He could not read music, but if he heard a tune a few times, he could play it. When he was younger, he was a member of a small country music band. They would play at local dances and on a few occasions would play for the local radio station. He often told us how he had auditioned and earned a position in a band that featured Patsy Cline as their lead singer. He told the family that after he was hired he never went back. Dad was a very religious man. He stated that there was a lot of drinking and cursing the day of his audition and he did not want to be around that type of environment.While having some money does have an impact on our level of happiness, having a lot of money does not. People in the United States whose income goes from US$20,000 a year to US$50,000 a year are more likely to be happy.";
Pattern pattern = Pattern.compile("(?!\\s).+?(?:[!?]|$|(?:(?<!\\d)\\.(?!\\d)))");
Matcher matcher = pattern.matcher(str);
int count = 0;
while (matcher.find()) {
System.out.println("第" + ++count + "句:" + matcher.group(0));
}
}

}



不错,但是还有点小瑕疵,如果问号不是作为分句符号,那就有错了,就像数字中的点号一样。


不错,但是还有点小瑕疵,如果问号不是作为分句符号,那就有错了,就像数字中的点号一样。

终于有人回复啦  
我想说的是,他这题目的意思就是以句号、问号、叹号作为每句的结束符的,想要能正确匹配所有句子的话不容易哦,你想下,在一句话中会出现小数点的情况有多少种,我能想到的有 “Mr.”、“Ms.”、“A.M.”、“P.M.”、“George W. Bush”,还有很多我没想到,要想在这些情况也能使用,那就得找出它们的所有规则才行。

我这里就当做是给个思路吧。
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------