当前位置: 首页 > 面试题库 >

正则表达式查找文本的所有句子?

和丰羽
2023-03-14
问题内容

我一直在尝试用python自学正则表达式,因此我决定打印出文本的所有句子。在过去的3个小时里,我一直在修改正则表达式,但无济于事。

我只是尝试了以下内容,但无能为力。

p = open('anan.txt')
process = p.read()
regexMatch = re.findall('^[A-Z].+\s+[.!?]$',process,re.I)
print regexMatch
p.close()

我的输入文件是这样的:

OMG is this a question ! Is this a sentence ? My.
name is.

这不打印输出。但是,当我删除“我的名字是”时,它会打印OMG,这是一个问题,这是否是一个句子,就好像它只读第一行一样。

正规表达式的最佳解决方案是什么,它可以找到文本文件中的所有句子(无论句子是否换行,也可以读取整个文本)?谢谢。


问题答案:

像这样的作品:

## pattern: Upercase, then anything that is not in (.!?), then one of them
>>> pat = re.compile(r'([A-Z][^\.!?]*[\.!?])', re.M)
>>> pat.findall('OMG is this a question ! Is this a sentence ? My. name is.')
['OMG is this a question !', 'Is this a sentence ?', 'My.']

请注意name is.结果中不是怎么回事,因为它不是以大写字母开头。

您的问题来自^$锚的使用,它们在整个文本上都有效。



 类似资料:
  • 我有一个pdf摘录文本,看起来像这样 ======================================== 标题 字幕 Lorem Ipsum只是印刷的虚拟文本 以及排版业。Lorem Ipsum已被删除 自16世纪以来业界标准的虚拟文本。 字幕 Lorem Ipsum只是打印和打印的虚拟文本 排版业。Lorem Ipsum一直是业界 自16世纪以来的标准虚拟文本。 =========

  • 问题内容: 我正在解析的字符串中可能包含任意数量的带引号的字符串(我在解析代码,并尝试避免使用PLY)。我想找出是否有子字符串被引用,并且我有子字符串索引。我最初的想法是使用re查找所有匹配项,然后找出它们代表的索引范围。 似乎我应该将re与类似的正则表达式一起使用(目前,我避免使用三引号和此类字符串)。当我使用findall()时,会得到一个匹配字符串的列表,虽然有些不错,但我需要索引。 我的子

  • 我的PHP脚本具有以下格式的函数,但我需要找到i8n中的所有字符串。 使用一些正则表达式,我设法获得了接近我想要的结果。 对于这种情况,RegEx是完美的。当同一行上有其他内容并最终合并结果时,就会出现问题。 我如何获得每一个单独?

  • 在这个问题的背景下,我想做以下修改: 查找: funcA(参数0,参数1,参数2,参数3); 替换: funcA可以有除param0之外的任意数量的参数。怎么做呢?为简单起见,忽略基本情况,即当传递给funcA的参数仅为param0时。 funcA是: 职能是: 编辑: 参数(param1,param2..)只是包含字母的字符串。

  • 我试图匹配所有包含引号的句子,独立于引号的长度或引号内的句子数量。 正如Alfe所指出的,得到一个完美的正则表达式可能是不可行的,但是如果可能的话,我想改进我正在使用的正则表达式。 现在我这样做是为了找到报价: 但是我想确保引用出现在一个句子中,然后捕捉整个句子。 我所说的一句话是指一段文字: 通常前面有空格 正如阿尔夫指出的那样,这并不能涵盖所有的句子,但如果我能满足这些条件,那就足够了。 例如

  • 我对正则表达式很陌生,正在寻找一个匹配任何东西的表达式,除了所有匹配给定正则表达式的东西。我已经找到了除了特定字符串以外的任何东西的方法,但是我需要它不匹配一个正则表达式。它还必须在Java工作。 背景:我正在使用ANSI颜色的字符串。我想取一个字符串,它有一些文本,可能是用Ansi颜色代码格式化的,并删除除那些颜色代码以外的任何东西。这将给出附加到字符串上的任何字符的当前颜色格式。 格式化字符串

  • 问题内容: 我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是: 我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码: 但是,无论我尝试什么,每次返回的结果都是一片空白。 问题答案: 首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使

  • 这是与java正则表达式匹配的所有重叠子字符串的后续。 有没有办法让这段代码更快?