如何从文本中删除小写句子片段?

2024-09-27 00:12:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用常规表达式或简单的Perl oneliner从标准文本文件中删除小写句子片段。在

这些通常被称为言语或归因标签,例如-他说,她说,等等

此示例显示使用手动删除之前和之后:

  1. 原件:

“啊,那是真的!”阿尤莎喊道。在

“哦,别再装傻了!有个白痴进来,你让我们 真丢人!”窗边的女孩喊道,突然转向她父亲 带着轻蔑和轻蔑的神情。在

“等等,瓦瓦拉!”她父亲喊道,专横地说 非常赞许地看着他们。”这就是她的性格,”他说, 再次向阿尤莎致辞。在

“你去哪儿了?”他问他。在

“我想,”他说,“我忘了一些事。。。我的手帕,我 想想。。。。好吧,即使我没有忘记什么,让我留下来 一点点。”

他坐了下来。父亲站在他身边。在

“你也坐下吧,”他说。在


  1. 手动删除所有小写句子片段:

“啊,那是真的!”在

“哦,别再装傻了!有个白痴进来,你让我们 真丢人!”在

“等等,瓦瓦拉!”这就是她的性格。”

“你去哪儿了?”在

“我想,”“我忘了一些事。。。我的手帕,我 想想。。。。好吧,即使我没有忘记什么,让我留下来 一点点。”

他坐了下来。父亲站在他身边。在

“你也坐下吧”


我把直引号改成了平衡和尝试:(…)+[.]

当然,这会删除一些片段,但会删除一些平衡引号中的文本和以大写字母开头的文本。[^A-Z]在上面的表达式中无效。在

我意识到要达到100%的准确率可能是不可能的,但是任何有用的表达式、perl或python脚本都将受到深切的感谢。在

干杯

亚伦


Tags: 文本标准表达式手动常规引号perl句子
3条回答

我不完全确定您使用的是哪个编辑器,如果您使用的是支持原子分组的编辑器(例如EditorPad Pro),您可以使用下面的正则表达式进行搜索和替换:

搜索

(".+?"|^[A-Z].+\r\n)(.(?!"))* 
Note: you should replace \r\n with \n or \r according to your line breaks

替换为

^{pr2}$

下面是对正则表达式的一点解释:

The first capturing group is for characters between quotes and lines starting with Capital Letters. The second capturing group is for any characters that is after a quote but before another quote.

下面是一个Python代码片段:

 thetext="""triple quoted paste of your sample text"""
 y=thetext.split('\n')
 for line in y:
    m=re.findall('(".*?")',line)
    if m:
        print ' '.join(m)
    else:
        print line

这适用于问题中显示的所有情况:

sed -n '/"/!{p;b}; s/\(.*\)"[^"]*/\1" /;s/\(.*"\)\([^"]*\)\(".*"\)/\1 \3/;p' textfile

在以下情况下失败:

^{pr2}$

相关问题 更多 >

    热门问题