Python Regex Bullet Point和多行匹配

时间:2018-05-09 11:49:36

标签: python regex

想要匹配两个单词或短语之间的内容,其内部有一个项目符号点,在python中有多行,并且适用于开头和结尾之间的每个单词变体。不知道用于子弹点的标识符或标识符以匹配包括换行符在内的所有内容。例如,尝试匹配:

Hello • World Hello • World Hello • World Hello • World Hello • World Hello • World 

 hello_big_old_world = "qweqrqr  Hello • World Hello • World Hello • World Hello • World Hello • World Hello • World fdsfdas"

此字符串超过多行。我知道它可能不在球场,但是到目前为止我所拥有的并且显然它不起作用。

Answer = re.findall("(?<=qweqrqr)(.*\n?)/s(?=fdsfdas)"), hello_big_old_world)
print(Answer)

先谢谢。

3 个答案:

答案 0 :(得分:1)

要匹配包含换行符在内的所有字符,您仍然使用.字符,但会将flags=re.DOTALL传递给re.findall等函数。

答案 1 :(得分:1)

您可以使用

qweqrqrfdsfdas的字符串与至少1个项目符号点匹配
hello_big_old_world = "qweqrqr  Hello • World Hello • World Hello • World Hello • World Hello • World Hello • World fdsfdas"
print(re.findall(r'qweqrqr([^\u2022]*\u2022.*?)fdsfdas', hello_big_old_world, re.S))

请参阅Python 3 demo

请注意,如果在括号组的两端添加(= 0 +空格字符),则可以使用\s*代替Unicode字符表示并从捕获的文本中删除空格:

re.findall(r'qweqrqr\s*([^•]*•.*?)\s*fdsfdas', hello_big_old_world, re.S)

它应该work in both Python 3和Python 2。

<强>详情

  • qweqrqr - 匹配正确的分隔符
  • ([^\u2022]*\u2022.*?) / ([^•]*•.*?) - 捕获到第1组(使用re.findall返回的字符串)
    • [^\u2022]* / [^•]* - 除了要点之外的任何字符
    • \u2022 / - 要点
    • .*? - 任意0个字符(包括由re.S(= re.DOTALL)标记引起的换行符)尽可能少(由于惰性量词*?
  • fdsfdas - 匹配左分隔符

答案 2 :(得分:1)

您可以稍加改动地使用regex

  • /s应为\s

  • 使用re.DOTALL来匹配中间有换行符的情况。

使用代码

import re

hello_big_old_world = 'qweqrqr  Hello • World Hello • World Hello • World Hello • World Hello • World Hello • World fdsfdas'

Answer = re.findall("(?<=qweqrqr)(.*\n?)\s(?=fdsfdas)", hello_big_old_world, re.DOTALL)
print(Answer)

# [' Hello • World Hello • World Hello • World Hello • World Hello • World Hello • World']