大家好我是regex的新手:
我有一个字符串等等被视为句子的结尾,我怎样才能在现有的正则表达式中将其视为句末。
sentence: 'hello how are you, can you pass me pen, book etc. I am going to travel abroad. I am going on vacation. Let me know if anything needs to be done in something.com.';
regex: (/(.*?(?:\.|\?|!))(?: |$)/g);
当前输出:
预期产出:
答案 0 :(得分:1)
在示例中,它非常困难,因为它将是句子的有效结尾。下一封信是大写字母。
展望未来,不仅仅是为了行尾,而且如果下一个字母是大写字母,那么大多数情况都会出现:
var sentences = stringSentence.match(/(.*?(?:[.?!])\s*)(?=([A-Z])|$)/g);
但是在这个例子中,由于我是一个大写字母,它仍然会破裂。但是如果用逗号和/或单词作为'因为'在等等之后添加,匹配将起作用(并且在语法上更正确)
如果这还不够,可以添加一些表示缩写的例外情况。问题是,这个缩写实际上可能在一个句子的末尾......
例如,I am going on vacation to relax etc.
应匹配。
答案 1 :(得分:0)
最简单的方法是使用..或......之后等等。但是,如果你不能这样做,我会为它做一个特定的匹配案例,因为它确实是一个特定的案件。试着看看这些:
http://regexone.com/lesson/matching_characters(看看解决方案以获得一个想法)
一种可能的解决方案是:
(?<![\w\d])etc(?![\w\d])
这会匹配等但周围没有单词,只有句号。它仍然会接受.etc我相信如果这是一个问题。
答案 2 :(得分:0)
这将做你想要的:
([a-zA-Z0-9\ \,]+(?!\ etc)\.)/g
请注意,您说不匹配&#34;等等#34;。在这个正则表达式中,域名将被拆分,因为在某些东西和com之间有一个点。