我有一个正则表达式应该找到包含一些不以句号结尾的文本的所有“标题行”或?或者!:
tit_pat = re.compile(r"([\w ]+?)(?![!?.])\n",re.UNICODE)
res = tit_par.findall(data)
: 例如:
第1x章测试
这是一项测试测试测试。这是一个带有一些文字和更多的测试 text.This测试用一些文本和更多文本一些文本和更多文本。 这是一些更多的文本,一些更多的文本更多的文本 章aaa
这是一个考验。这是一个带有一些文本和更多文本的测试,一些文本和更多文本一些文本和更多文本一些文本和更多文本 BBBB
结束。
正则表达式是找到包含一些没有句号和新行的文本的所有“标题行”。这是预期的,因为有一个(负面)预测声明在接受之前检查不是句点(或!或?)。 但是,我可能会有一个句子从一行开始,并以下一行中的句号结束。正则表达式没有找到没有句点的文本行。这种行为有解释吗?
答案 0 :(得分:1)
你的正则表达式基本上意味着“找到尽可能少的单词,这样在单词后面没有不需要的字符,然后在这些单词之后立即找到换行符”。单词检查部分不会找到不需要的字符,因为它们不是单词的一部分,并且前瞻断言是多余的,因为换行不是不需要的字符。
你似乎想要的是“找到一条线,使最后一个字符不是不想要的字符之一”。这可能并不真正需要正则表达式,但如果你想使用它们,最明显的方法是将文本一次取一行,然后search
取出(?<![.!?])$
之类的内容。 / p>