【发布时间】:2019-10-25 02:31:58
【问题描述】:
我有以下字符串
{class:"table table-striped"},c.a.createElement("thead",{class:"thread-dark"},c.a.createElement("tr",null,c.a.createElement("th",{scope:"col"},"Round 1"),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}))),c.a.createElement("tbody",null,c.a.createElement("tr",null,c.a.createElement("td",null,"Parc des Princes",c.a.createElement("br",null),"Paris"),c.a.createElement("td",{align:"right"},"France ",c.a.createElement("img",{src:"img/RoundFlags/France.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"},c.a.createElement("a",{href:"/fra-kor"},"4 - 0")),c.a.createElement("td",{align:"left"},c.a.createElement("img",{src:"img/RoundFlags/Korea.png",width:"50",hspace:"20"})," Korea"),c.a.createElement("td",null,"Group A")),c.a.createElement("tr",null,c.a.createElement("td",null,"Roazhon Park",c.a.createElement("br",null),"Rennes"),c.a.createElement("td",{align:"right"},"Germany ",c.a.createElement("img",{src:"img/RoundFlags/Germany.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"},c.a.createElement("a",{href:"/deu-chn"},"1 - 0")),c.a.createElement("td",{align:"left"},c.a.createElement("img",{src:"img/RoundFlags/China.png",width:"50",hspace:"20"})," China"),c.a.createElement("td",null,"Group B")),c.a.createElement("tr",null,c.a.createElement("td",null,"Stade Oceane",c.a.createElement("br",null),"Le Havre"),c.a.createElement("td",{align:"right"},"Spain ",c.a.createElement("img",{src:"img/RoundFlags/Spain.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"}
我正在尝试检索 2 个相同子字符串之间的所有字符,即 c.a.createElement("tr" 和 c.a.createElement("tr" 之间的所有字符作为列表。
我的尝试是使用以下正则表达式模式:
c\.a\.createElement\("tr"(.*?)c\.a\.createElement\("tr"
如图所示跳过了一些序列,而不是在序列之间获取每一个:
在上面你可以看到第二场比赛 1 第 0 组(浅蓝色)后面没有第 1 组(绿色),尽管有后续 c.a.createElement("tr"(第 2 场深蓝色)。
如果对正则表达式有帮助,请点击此处:https://regex101.com/r/xzbHBU/1/
我尝试了各种外观,例如
(?<=c\.a\.createElement\("tr")(.*?)(?!c\.a\.createElement\("tr")
并添加re.DOTALL 标志;由于过于严格,所有这些都不幸地无法匹配。
谁能帮我编写适当的正则表达式来检索我在期望中描述的所有组?
Python:
import re
s = '{class:"table table-striped"},c.a.createElement("thead",{class:"thread-dark"},c.a.createElement("tr",null,c.a.createElement("th",{scope:"col"},"Round 1"),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}),c.a.createElement("th",{scope:"col"}))),c.a.createElement("tbody",null,c.a.createElement("tr",null,c.a.createElement("td",null,"Parc des Princes",c.a.createElement("br",null),"Paris"),c.a.createElement("td",{align:"right"},"France ",c.a.createElement("img",{src:"img/RoundFlags/France.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"},c.a.createElement("a",{href:"/fra-kor"},"4 - 0")),c.a.createElement("td",{align:"left"},c.a.createElement("img",{src:"img/RoundFlags/Korea.png",width:"50",hspace:"20"})," Korea"),c.a.createElement("td",null,"Group A")),c.a.createElement("tr",null,c.a.createElement("td",null,"Roazhon Park",c.a.createElement("br",null),"Rennes"),c.a.createElement("td",{align:"right"},"Germany ",c.a.createElement("img",{src:"img/RoundFlags/Germany.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"},c.a.createElement("a",{href:"/deu-chn"},"1 - 0")),c.a.createElement("td",{align:"left"},c.a.createElement("img",{src:"img/RoundFlags/China.png",width:"50",hspace:"20"})," China"),c.a.createElement("td",null,"Group B")),c.a.createElement("tr",null,c.a.createElement("td",null,"Stade Oceane",c.a.createElement("br",null),"Le Havre"),c.a.createElement("td",{align:"right"},"Spain ",c.a.createElement("img",{src:"img/RoundFlags/Spain.png",width:"50",hspace:"20"})),c.a.createElement("td",{className:"align-middle",align:"center"}'
p = re.compile(r'c\.a\.createElement\("tr"(.*?),c.a.createElement\("tr"')
matches = p.findall(s)
print(len(matches))
【问题讨论】:
标签: python regex python-3.x