Python正则表达式搜索

Python正则表达式搜索,python,regex,Python,Regex,我前面的例子不清楚,我举另一个例子: a = '123 - 48 <!-- 456 - 251 - --> 452 - 348' 我明白了: ['123', '48 <!-- 456', '251', '--> 452', '348'] ['123','48452','348'] 但我想要这个: ['123', '48 <!-- 456 - 251 - --> 452', '348'] ['123','48452','348'] 谢谢…首先使用以下方

我前面的例子不清楚,我举另一个例子:

a = '123 - 48 <!-- 456 - 251 - --> 452 - 348'
我明白了:

['123', '48 <!-- 456', '251', '--> 452', '348']
['123','48452','348']
但我想要这个:

['123', '48 <!-- 456 - 251 - --> 452', '348']
['123','48452','348']

谢谢…

首先使用以下方法删除评论:

re.sub("<!--.*?-->", "", your_string)
re.sub(“,”,您的字符串)
然后使用正则表达式提取数字


您也可以使用
(否定的前瞻断言),但这并不是那么简单。

首先使用如下方法删除注释:

re.sub("<!--.*?-->", "", your_string)
re.sub(“,”,您的字符串)
然后使用正则表达式提取数字


您也可以使用
(消极的前瞻断言),但这并不是那么简单。

如果您想要一个正则表达式,您可以使用如下内容:

(\d+)(?!(?:[^<]+|<(?!!--))*-->)
(\d+)(!(?:[^


它匹配的数字后面不跟
-->
,不跟
,如果您想要一个正则表达式,可以使用如下内容:

(\d+)(?!(?:[^<]+|<(?!!--))*-->)
(\d+)(!(?:[^


它匹配的数字后面没有
-->
,没有
您发布的结果是
re.findall('(\d+),a);

re.findall('(?:\)|(\d+),a)
['123','48','452','348']

filter(None, re.findall('(?:\<\!--.+\d+.+--\>)|(\d+)',a))
过滤器(无,关于findall('(?:\)|(\d+),a))

['123','48','452','348']

您发布的结果是
re.findall('(\d+),a);

filter(None, re.findall('(?:\<\!--.+\d+.+--\>)|(\d+)',a))
re.findall('(?:\)|(\d+),a)
['123','48','452','348']

filter(None, re.findall('(?:\<\!--.+\d+.+--\>)|(\d+)',a))
过滤器(无,关于findall('(?:\)|(\d+),a))

['123'、'48'、'452'、'348']

你会这样做(得到结果…),使用哪种python版本?根据我的经验,el是数组理解中的字符串类型,而不是使用dict(…)Ok@Update.不过,我认为非捕获组使用<代码>过滤器>代码>最快的解决方案之一,特别是对于较长的文本。(别忘了选择一个答案。)是的(得到结果…,使用哪种python版本?根据我的经验,el是数组理解中的字符串类型,而不是使用dict(…)Ok@Update.不过,我认为非捕获组使用<代码>过滤器>代码>最快的解决方案之一,特别是对于较长的文本。(别忘了选一个答案。)
1--2--3
13
,几个不起作用的例子。
1--2--3
13
,几个不起作用的例子。即使对于strlen~100,它的速度也非常慢(Python2.7)。但如果它支持原子组或所有格量词,你可以尝试
(\d+(!(?:[^)
即使对于strlen~100,速度也非常慢(python 2.7)。但是如果它支持原子组或所有格量词,您可以尝试
(\d+)(?:[^)
filter(None, re.findall('(?:\<\!--.+\d+.+--\>)|(\d+)',a))