我想对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
答案 0 :(得分:1)
由于@Tushar没有解释你对你的正则表达式的问题,我决定解释它。
你的正则表达式 - Enter(.?)*\.
- 匹配一个单词Enter
(字面意思),然后可选地匹配除换行符之外的任何字符0次或更多次,直到最后一个句点。
问题是您的字符串包含Enter
和句点之间的换行符。你也需要一个正则表达式模式来匹配换行符。要强制.
匹配换行符号,您可以使用DOTALL
模式。但是,由于*
量词是 greedy (将返回最长的子字符串),它无法获得预期的结果。
因此,要从Enter
获取子字符串直到最接近的句点,您可以使用
Enter([^.]*)
见this regex 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