正则表达式匹配多行与换行符和文字

时间:2016-03-29 12:05:01

标签: python regex

考虑您在下面解析以下文本: 我想只获取Fetch键之后的值(直到最后一个逗号不包括在内)(239847238974982374897289347982374892734897238947892374892374892374

<some_xml="SDFSDF_sd\S-1-sdfsdfsdfsdfsdfsdf"> Key1: 3A68686BGGHJ12, Fetch: 239847238974982374897289347982374892734897238947892374892374892374, {sdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf}: </some_xml> 我这样做的正则表达式是:<some_xml.*>[\s.]*Fetch:([^,]*) 出于某种原因,[\s.]并未在我的Fetch密钥之前捕获所有可能的冗余信息,您能解释一下原因吗?

整个例子是here

编辑:我的正则表达式在第一个[]组之后丢失*,但仍然是同样的问题,修复版本here - 但存在同样的问题

3 个答案:

答案 0 :(得分:1)

部分[\s.]*匹配任意数量的空格或句号,但仅限于这些。您可能正在寻找.*?之类的内容。它可能会起作用,但这里确实存在其他一些问题。例如。 <some_xml.*>如果有多个标记,则会跳过整个标记,因为.*会尽可能多地匹配。

请使用正则表达式工作 here at regex101并注意它如何跳过第一部分并在第二部分中选择字符串。

此致

答案 1 :(得分:0)

试试这个 -

<some_xml.*>(?:\s|.)*Fetch:([^,]*)
            ^^^^^^^^

演示here
它失败了,因为[\s.]字面上匹配.字符。

答案 2 :(得分:0)

我认为我发现了另一种方法,但在贪婪地捕捉同一个xml标签的下一个实例方面存在同样的问题。

here

编辑:知道了,这是一个fixed