我目前遇到的问题是我认为这是一项简单的任务。
如果我有一个字符串:
句子1“双引词”句子1.句子2?句子3(括号中的数字如1.2不应该分开)。句子4'单引号。其余的引用'句子4.句子5!
我想把它分成:
句子1“双引词”句子1。
句子2?
句子3(括号中的数字如1.2不应该分开)。
句子4'单引词。引用的其余部分'句子4。
句子5!
显然,简单的"\.|\?|!"
匹配不起作用。任何帮助表示赞赏。
我意识到正则表达式可能不是最好的工具,但除非有其他快速简单的解决方案,我缺席了,我已经过了不归路。
答案 0 :(得分:1)
尝试以下正则表达式
(?:^|\s).+?[.!?](?:\s|$)
答案 1 :(得分:1)
我不确定它是否适用于正则表达式。
但看看这个正则表达式(使用sed):
sed -r 's/([.?!]) +([A-Z])|\1$/\1\n\2/g' file
输出:
Sentence 1 “double quoted phrase” sentence 1.
Sentence 2?
Sentence 3 (numbers in parentheses like 1.2 should not be split).
Sentence 4 ' single quoted phrase. rest of quote' sentence 4.
Sentence 5!
但它并不完美。如果您将句子4中的rest
更改为Rest
则会失败。
问题是,你必须检查,.!?
包裹的"",'',(),[],{}....
是不是句子的结尾。然而,更糟糕的是,例如,我会写一个句子:
The dot ". is a period.
注意我忘了(错误)收尾报价。或以下(两句话):
Why not put a brace "(" there ? The closing brace ")" is missing its partner.
你的程序(由正则表达式)如何知道这应该是两句话?