Python,这个正则表达式应该如何工作

时间:2011-11-07 18:55:47

标签: python regex

我有一个正则表达式应该找到包含一些不以句号结尾的文本的所有“标题行”或?或者!:

tit_pat = re.compile(r"([\w ]+?)(?![!?.])\n",re.UNICODE)
res = tit_par.findall(data)

: 例如:

  

第1x章测试
  这是一项测试测试测试。这是一个带有一些文字和更多的测试   text.This测试用一些文本和更多文本一些文本和更多文本。   这是一些更多的文本,一些更多的文本更多的文本   章aaa
  这是一个考验。这是一个带有一些文本和更多文本的测试,一些文本和更多文本一些文本和更多文本一些文本和更多文本   BBBB
  结束。

正则表达式是找到包含一些没有句号和新行的文本的所有“标题行”。这是预期的,因为有一个(负面)预测声明在接受之前检查不是句点(或!或?)。 但是,我可能会有一个句子从一行开始,并以下一行中的句号结束。正则表达式没有找到没有句点的文本行。这种行为有解释吗?

1 个答案:

答案 0 :(得分:1)

你的正则表达式基本上意味着“找到尽可能少的单词,这样在单词后面没有不需要的字符,然后在这些单词之后立即找到换行符”。单词检查部分不会找到不需要的字符,因为它们不是单词的一部分,并且前瞻断言是多余的,因为换行不是不需要的字符。

你似乎想要的是“找到一条线,使最后一个字符不是不想要的字符之一”。这可能并不真正需要正则表达式,但如果你想使用它们,最明显的方法是将文本一次取一行,然后search取出(?<![.!?])$之类的内容。 / p>