包含多行的模式的Python正则表达式

2024-04-26 07:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取所有打印在“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Give me some text!
AAAAAAAAAAAAAAAAAA




        S
       p
      p
     p
Epppp

以下操作无效:

import re

m = re.findall(r'AAAAAAAAAAAAAAAAAA(.*)', result)

print m[0]

另外,我可以在正则表达式中指定一个变量而不是硬编码字符串:“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?你知道吗

原因在于,文本中:“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。所以,我想在模式中寻找一个特定的变量值,然后提取它后面的所有文本。你知道吗


1条回答
网友
1楼 · 发布于 2024-04-26 07:54:58

使用re.Sre.DOTALL(它们是同义词)跨行进行findall匹配。或者,在您的情况下,search可能更合适,因为您只需要一个匹配项。另外,要使其适用于非硬编码字符串,只需使用字符串格式或字符串串联。要避免字符串中出现未转义的正则表达式字符,请通过re.escape运行它。你知道吗

import re

result = """Give me some text!
AAAAAAAAAAAAAAAAAA




        S
       p
      p
     p
Epppp"""

s = 'AAAAAAAAAAAAAAAAAA'
# With formatting
m = re.search(r'{}(.*)'.format(re.escape(s)), result, re.S)
# With concatenation
m = re.search(re.escape(s) + r'(.*)', result, re.S)

print m.group(1)

相关问题 更多 >