Python重新找到所有组合打印为字符串

时间:2017-09-19 23:52:43

标签: python regex

使用Python正则表达式如何找到组合的所有实例并在新行上打印每个实例?

示例:

import re

x = "a=123,b=123,c=123,d=123,a=456,b=456...etc"
y = re.search('a=(.*?),', x)
print(y)

试图获得:

123
456

2 个答案:

答案 0 :(得分:3)

正则表达式

首先,您的正则表达式不正确。您匹配a=后跟任意数量的字符。这将一次匹配整个字符串,因为*主要是贪婪的。相反,你试图找到任意数量的字母,等号,然后是任意数字的数字。

[A-Za-z]+=(\d+)  Regular Expression
        +        At least one
[A-Za-z]         (English) letter
         =       An equals sign
          (   )  Group 1
             +   At least one
           \d    digit

另外,请使用re.findall而不是re.search

然后,执行re.findall(r"[A-Za-z]+=(\d+)", x)将给出字符串列表,您可以打印,解析,等等。

此外,可能有更好的方法:如果数据与格式化完全相同,则可以使用常规字符串操作:

a = "a=123,b=456,c=789"
b = a.split(",") # gets ["a=123", "b=456", "c=789"]
c = [E.split("=") for E in b] # gets [["a", "123"], ["b", "456"], ["c", "789"]]

然后,如果要将其转换为字典,可以使用dict(c)。如果要打印值,请执行for E in c: print(E[1])。等

答案 1 :(得分:2)

只需使用re.findall

import re
x = "a=123,b=123,c=123,d=123,a=456,b=456...etc"
final_data = re.findall("(?<=a\=)\d+", x)
for i in final_data:
   print(i)

输出:

123
456

此正则表达式使用正面外观确保数字是a=表达式的一部分:

\d+:匹配所有数字,直到找到非数字字符(在本例中为下一个表达式的开头)。

(?<=a\=):搜索a=表达式的一部分,并充当\d+正则表达式的锚点。