Python 正则表达式匹配所有带引号的句子
我试图匹配所有包含引号的句子,与引号的长度或引号内的句子数量无关 正如阿尔夫指出的,获得一个完美的正则表达式可能是不可行的,但如果可能的话,我想改进我正在使用的正则表达式 现在我这样做是为了找到报价:Python 正则表达式匹配所有带引号的句子,python,regex,Python,Regex,我试图匹配所有包含引号的句子,与引号的长度或引号内的句子数量无关 正如阿尔夫指出的,获得一个完美的正则表达式可能是不可行的,但如果可能的话,我想改进我正在使用的正则表达式 现在我这样做是为了找到报价: def split_by_quotes(text): pattern = r'([A-Z].*?\".*?\".*?\.)' quotes = re.findall(pattern, text) return(quotes) 但我想确保引用出现在一个句子中,然后捕获整个句
def split_by_quotes(text):
pattern = r'([A-Z].*?\".*?\".*?\.)'
quotes = re.findall(pattern, text)
return(quotes)
但我想确保引用出现在一个句子中,然后捕获整个句子
我所说的句子是指一段文字:
这个模式在ruby中对我很有用。一旦你将它转换成r,在python中应该很好
/([a-zA-Z,\']+\”[^.]+\.)/
Elliott我认为您想要做的事情不能使用正则表达式来完成 自然语言是一件复杂的事情,即使是书面语言也不像看上去那么容易。有几件事我想指出,以明确哪些特殊情况是我得出结论的基础: 他落地了-砰在地上
“站住!”他喊道
500万人死亡 我不知道这些示例如何与自然语言句子的纯regexp匹配 编辑: 计算机几乎不可能区分这两种情况: 然后他说:“再也不会了!”然后他离开了房间
他敲了敲桌子,“再也没有了!”彼得说,然后离开了房间 在字符级别上,两者看起来完全相同(引号后面的大写字母,等等),但是第一个应该被解析成两个句子,第二个应该被解析成一个句子。这取决于一个像人类一样理解智慧的人是否能看到这两种情况是不同的。技术字符不显示此信息。这对您有帮助吗 请注意,我编辑的第一个答案很愚蠢,因为其中的regx与所有句子匹配,而不仅仅是带有引号的句子。
我还考虑了Alve的评论:正则表达式捕捉到的句子不仅仅以大写字母开头,而是以点后的第一个字符开头,除了空白或
\r
或n
或可能的附加点之外
import re
regx = re.compile('(?!\Z)'
'[. \n\r]*'
'('
'(?:[^."]*"[^"]*")+'
'[^."]*'
'(?:\.|\Z)'
')')
s = ('''\nThe "some.rutu" and "oula oulah, poto." are '''
'''all good. A "bi'didi." is not. I '''
"""don't know why... 5 "million" people """
"""died . \nAnd here's a sentence without """
"""a quote. "Halt!" he shouted. 'Sunny """
"""days and "nights"' is a strange phrase""")
print s
print
for el in regx.findall(s):
print '- %s' % el
结果
The "some.rutu" and "oula oulah, poto." are all good. A "bi'didi." is not. I don't know why... 5 "million" people died .
And here's a sentence without a quote. "Halt!" he shouted. 'Sunny days and "nights"' is a strange phrase
- The "some.rutu" and "oula oulah, poto." are all good.
- A "bi'didi." is not.
- 5 "million" people died .
- "Halt!" he shouted.
- 'Sunny days and "nights"' is a strange phrase
我觉得你最后一个例子中的标点符号很奇怪。当然应该是
“我说,这将是一个大问题。”他说,“我的朋友们说,‘不,'这只是一只猫’”
我需要了解一下正则表达式,这让我现在有点沮丧@谢谢,我想你是对的。我来编辑这个问题。你好。一个句子叫什么?对于您的模式,您将无法捕获延伸到几行的内容,因为模式的点与换行符不匹配\n
。为什么你要抓住第一句话前面的内容而不是后面的内容?@eyquem谢谢,我更新了正则表达式模式。我在使用:([A-Z].*?\”.*?\。*?\)我是法国人。“短语”和“句子”这两个词在法语和英语之间的翻译非常混乱。法语单词短语表示文本中两点之间的任何内容,法语单词句子表示英语中的condamination或maxim。但是当我读英语单词短语和句子时,我从来没有清楚明白地理解它们所指的是什么。所以我几乎不理解你的问题这就是我害怕的。我最初使用nltk拆分句子,然后查看它们,但由于它以一种非常严格的方式拆分句子,我决定尝试使用正则表达式。即使它不完美,我也很乐意改进我的正则表达式模式。@Alfe你是说“停!”他喊道。
和500万人死亡。
不会被抓到,因为他们不是以大写字母开头的?关于第一个,没有引号,你对这个示例的意思是什么?是的,我所有示例的一个方面是,它们与指定“一个句子以大写字母开头,只包含字母和非结束符(逗号、连字符……)并以结束符结尾”的天真方法相矛盾(句号、感叹号、问号等)。“我又添加了两个示例,这两个示例清楚地表明,在所有情况下,仅仅进行字符分析并不能成功地正确识别句子。您编辑的示例非常好。我完全同意您的观点:一个程序无法区分两个