Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我不确定如何解释语句的一部分使用re.M而另一部分使用re.S的情况。我似乎找不到类似的问题或解决方案 我有以下声明: [re.findall('(?<!^--.*)[^\s]*_[^\s]*', i) for i in re.findall('\),\s+--+(.*?)as\s\(', text,flags=re.S)] 这不起作用,因为它似乎只使用了re.S [re.findall('(?<!^--.*)[^\s]*_[^\s]*', i, flags=.re.M)

我不确定如何解释语句的一部分使用
re.M
而另一部分使用
re.S
的情况。我似乎找不到类似的问题或解决方案

我有以下声明:

[re.findall('(?<!^--.*)[^\s]*_[^\s]*', i) 
    for i in re.findall('\),\s+--+(.*?)as\s\(', text,flags=re.S)]
这不起作用,因为它似乎只使用了
re.S

[re.findall('(?<!^--.*)[^\s]*_[^\s]*', i, flags=.re.M) 
    for i in re.findall('\),\s+--+(.*?)as\s\(', text,flags=re.S)]
目前产生的结果是什么

jumped_over_the_moon
cat_dog

我想让它跳过Pranav评论的
--
行,
re
在Python中不同于其他一些正则表达式引擎/包要求lookback操作符使用固定宽度的模式。因此,您应该将第一个正则表达式修改为

^[^-].*?[^\s]*_[^\s]*
编辑:根据更新的问题,这应该是

^[^-].*?[^\s]*_[^\s]*(?=\sas\s\()
最后的循环应该是这样的

[re.findall(r'^[^-].*?[^\s]*_[^\s]*(?=\sas\s\()', i, re.M) for i in re.findall(r'\),\s+--+.*?as\s\(', text, flags=re.S)]

它将返回
[[“cat_dog”]]

和提供的示例文本,您的预期输出是什么?我的主要问题是
(?在第一个语句中没有确认。我希望它跳过以
--
开头的行,但由于
re.s
而无法识别。我很惊讶您没有得到一个“向后看需要固定宽度的模式”错误,因为向后看需要固定宽度的模式和
(?不是固定宽度的模式为什么不先使用类似
的方法过滤掉以
--
开头的行,如果不是行的话。startswith('--'):…
是否使用
将regex作为re
导入?请尝试
[re.findall](r'(?你能更详细地解释一下吗?这似乎对我不起作用你想精确匹配什么以及这个答案对你不起作用?这就是我想寻求帮助的原因,如果多行标志被标记,但我的标志是单行的,我仍然很难理解为什么会失败。如果你只是想
cat_dog
,然后您可以在我的正则表达式末尾引入一个正向前瞻
(?=\sas\s\()
。非常感谢!因此需要
^
多行指示符加
re.M
^[^-].*?[^\s]*_[^\s]*(?=\sas\s\()
[re.findall(r'^[^-].*?[^\s]*_[^\s]*(?=\sas\s\()', i, re.M) for i in re.findall(r'\),\s+--+.*?as\s\(', text, flags=re.S)]