Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式使用换行符搜索两个关键字之间的所有子字符串_Python_Regex - Fatal编程技术网

Python 正则表达式使用换行符搜索两个关键字之间的所有子字符串

Python 正则表达式使用换行符搜索两个关键字之间的所有子字符串,python,regex,Python,Regex,假设我有一个python字符串“\\[this\\]是\\[some\n text\\]. s = "\\[this\\] is \\[some\n text\\]." 我想要一个正则表达式,它将返回子字符串“this”和“some text”。 我试过了 re.search(r'\\[(.*)\\]',s) 但是它不起作用(返回None)您在正则表达式中遗漏了一个反斜杠,并对点使用re.DOTALL来匹配换行符 import re s = "\\[this\

假设我有一个python字符串
“\\[this\\]是\\[some\n text\\].

s = "\\[this\\] is \\[some\n text\\]."
我想要一个正则表达式,它将返回子字符串“this”和“some text”。 我试过了

re.search(r'\\[(.*)\\]',s)

但是它不起作用(返回None)

您在正则表达式中遗漏了一个反斜杠,并对点
使用
re.DOTALL
来匹配换行符

import re

s = "\\[this\\] is \\[some\n text\\]."
r = re.findall(r'\\\[(.*?)\\\]', s, flags=re.DOTALL)
print(r)  # ['this', 'some\n text']

我会照字面意思理解你贴的字符串,但是你可以很容易地编辑以匹配另一个模式

我认为这可以完成以下工作:

'\\\\\[(.*?)\\\\\]'
解释:

  • \
    转义字符,因此使用\可以转义反斜杠。由于必须找到2个反斜杠,因此还需要另外2个反斜杠作为转义字符(总共4个)
  • 出于与上述相同的原因,您还需要一个
    \
    来转义
    [
    字符
  • 设置捕获组
  • 匹配任何字符
  • *
    尽可能多的次数,但后面跟着一个
    表示尽可能少的次数
  • 关闭捕获组
  • 其他5个
    \
    后面跟
    ]
    的工作原理如前所述(转义反斜杠/括号序列)

希望我能帮忙;)

您可以对捕获组使用否定字符类
([^][]*)
,并在组外关闭
\
之前匹配
\

import re
s = "\\[this\\] is \\[some\n text\\]."

print(re.findall(r"\[([^][]*)\\]", s))
输出

['this', 'some\n text']

快速的我有
x=re.findall(r'(?s)\[([^\]]*)\\\]',s)
和链接,这些链接将匹配
r“\\[这个\\]是\\[一些\n文本\\].“
不是
”\[这个\\]是\\[一些\n文本\\].“
)这些是不同的字符串,而不是
r
preffix@azro是的,但是OP没有明确地问这个问题(我说我实际上使用了文本字符串)。如果您需要匹配以
\\[
开始,以
\\]
结束,您可以使用。正则表达式如下所示:
\B\[(.*)]\B