使用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
答案 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+
正则表达式的锚点。