我试图匹配所有包含引号的句子,与引号的长度或引号内的句子数无关。
正如Alfe指出的那样,获得一个完美的正则表达式可能不可行,但如果可能的话,我想改进我正在使用的那个。
现在我这样做是为了找到引用:
def split_by_quotes(text):
pattern = r'([A-Z].*?\".*?\".*?\.)'
quotes = re.findall(pattern, text)
return(quotes)
但我想确保引用出现在一个句子中然后捕获整个句子。
我用句子来表示一段文字:
这不会像Alfe指出的那样捕获所有句子,但如果我能在这些条件下匹配就足够了。
例如:
“这是一个引用,它应该匹配”
这是多次回车后在新行上没有引号的文本,不应匹配。
更复杂的例子:
查尔斯巴贝奇说:“有两次,我被[议会议员]问过,'祈祷,巴贝奇先生,如果你把错误的数字投入机器,那么正确的答案会出来吗?'我无法正确地理解可能引发这样一个问题的那种想法混淆。“
整个句子都匹配。
但是,
他们打电话给Garfield Minus Garfield和Lolcats,但是当约翰逊看到他认为是一个特别搞笑的片段,有人摔倒然后被一个带键盘的猫“戏剧”时,他的朋友认为这是蹩脚的。 “我说,这会很大。”他说,“我的朋友就像,'不,这只是一只猫。'”
将匹配如下:
他们打电话给Garfield Minus Garfield和Lolcats,但是当约翰逊看到他认为是一个特别搞笑的片段,有人摔倒然后被一个带键盘的猫“戏剧”时,他的朋友认为这是蹩脚的。
和
“我说,这会很大。”他说,“我的朋友就像,'不,这只是一只猫。'”
答案 0 :(得分:1)
我认为使用正则表达式无法完成您想要做的事情。
自然语言是一件复杂的事情,即使是书面文字并不像看起来那么容易。有几件事我想指出,以明确哪些特殊情况可以为我的结论奠定基础:
他降落了 - 砰的一声! - 在地上。
“暂停”!他喊道。
500万人死亡。
我不知道这些例子如何与自然语言句子的纯正则表达式相匹配。
编辑:
计算机几乎不可能区分这两种情况:
之后他说,“再也不会!”然后他离开了房间。
他打在桌子上,“再也不会!”彼得说,离开了房间。
在字符级别上,两者看起来完全相同(引号后的大写等),但第一个应该被解析为两个句子,第二个被解析为一个。要理解两种情况都不同,这取决于人类的理解情报。技术字符不显示此内容。
答案 1 :(得分:1)
这对你有帮助吗?
请注意,我编辑了第一个愚蠢的答案,因为其中的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
答案 2 :(得分:0)
这种模式对我来说是红宝石。将它转换为r''
后,在python中应该没问题 /([a-zA-Z,\' ]+\"[^.]+\.)/
埃利奥特