识别正则表达式中的新行

时间:2015-11-04 11:14:32

标签: python regex

我想对MAcbeth的文本执行一些正则表达式

我的文字如下:

TransferQueue

我的目的是让文字从Enter到全文。

我正在尝试这个正则表达式Scena Secunda. Alarum within. Enter King Malcome, Donalbaine, Lenox, with attendants, meeting a bleeding Captaine. King. What bloody man is that? he can report, As seemeth by his plight, of the Reuolt The newest state

但它没有显示任何匹配。任何人都可以修复我的正则表达式吗?

我正在尝试link

1 个答案:

答案 0 :(得分:1)

由于@Tushar没有解释你对你的正则表达式的问题,我决定解释它。

你的正则表达式 - Enter(.?)*\. - 匹配一个单词Enter(字面意思),然后可选地匹配除换行符之外的任何字符0次或更多次,直到最后一个句点。

问题是您的字符串包含Enter和句点之间的换行符。你也需要一个正则表达式模式来匹配换行符。要强制.匹配换行符号,您可以使用DOTALL模式。但是,由于*量词是 greedy (将返回最长的子字符串),它无法获得预期的结果。

因此,要从Enter获取子字符串直到最接近的句点,您可以使用

Enter([^.]*)

this regex demo。如果您不需要捕获组,请将其删除。

IDEONE demo

import re
p = re.compile(r'Enter([^.]*)')
test_str = "Scena Secunda.\n\nAlarum within. Enter King Malcome, Donalbaine, Lenox, with\nattendants,\nmeeting a bleeding Captaine.\n\n  King. What bloody man is that? he can report,\nAs seemeth by his plight, of the Reuolt\nThe newest state"
print(p.findall(test_str)) # if you need the capture group text, or
# print(p.search(test_str).group()) # to get the whole first match, or
# print(re.findall(r'Enter[^.]*', test_str)) # to return all substrings from Enter till the next period