想要匹配两个单词或短语之间的内容,其内部有一个项目符号点,在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)
先谢谢。
答案 0 :(得分:1)
要匹配包含换行符在内的所有字符,您仍然使用.
字符,但会将flags=re.DOTALL
传递给re.findall
等函数。
答案 1 :(得分:1)
您可以使用
将qweqrqr
到fdsfdas
的字符串与至少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']