正则表达式查找标记之间的所有子字符串保留额外的字符
Regex finding all substrings between markers keeps extra characters
我真的很困惑,因为我不认为那些是特殊字符。无论哪种情况,我都尝试在它们前面加上反斜杠。
但是我有一个很大的文本文件,基本上是 html 代码。我想在一些标签之间提取文本。
我在下面裁剪了一块:
b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em iv3no6db jq4qci2q a3bd9o3v lrazzd5p
bwm1u5wc" dir="auto"><span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7 ltmttdrg
g0qnabr5">Text #1</span></a></div><div class="aahdfvyu"></span></span></div>
</div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em
mdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2</span></a></div>
<div class="aahdfvyu"><span class="d2edcug0 hpfvmrgz qv66sw1b c1e
我想要它 return ['Text #1', 'Text #2']
我试过
result = re.findall(r'>(.*?)</span></a></div><div class="aahdfvyu">', f)
但它返回
['<span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7 ltmttdrg g0qnabr5">Text #1', '</span></div></div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em mdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2']
所以它不会删除字符串之前的所有内容。为什么?
text="""b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em iv3no6db jq4qci2q a3bd9o3v
lrazzd5pbwm1u5wc" dir="auto"><span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7
ltmttdrgg0qnabr5">Text #1</span></a></div><div class="aahdfvyu"></span></span></div>
</div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2emmdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2</span></a></div><div class="aahdfvyu"><span class="d2edcug0 hpfvmrgz qv66sw1b c1e"""
re.findall(r'>([^<]+)</span></a></div><div class="aahdfvyu">',text)
结果
['Text #1', 'Text #2']
我真的很困惑,因为我不认为那些是特殊字符。无论哪种情况,我都尝试在它们前面加上反斜杠。 但是我有一个很大的文本文件,基本上是 html 代码。我想在一些标签之间提取文本。 我在下面裁剪了一块:
b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em iv3no6db jq4qci2q a3bd9o3v lrazzd5p
bwm1u5wc" dir="auto"><span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7 ltmttdrg
g0qnabr5">Text #1</span></a></div><div class="aahdfvyu"></span></span></div>
</div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em
mdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2</span></a></div>
<div class="aahdfvyu"><span class="d2edcug0 hpfvmrgz qv66sw1b c1e
我想要它 return ['Text #1', 'Text #2']
我试过
result = re.findall(r'>(.*?)</span></a></div><div class="aahdfvyu">', f)
但它返回
['<span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7 ltmttdrg g0qnabr5">Text #1', '</span></div></div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em mdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2']
所以它不会删除字符串之前的所有内容。为什么?
text="""b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2em iv3no6db jq4qci2q a3bd9o3v
lrazzd5pbwm1u5wc" dir="auto"><span class="a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7
ltmttdrgg0qnabr5">Text #1</span></a></div><div class="aahdfvyu"></span></span></div>
</div><div class="n00jemau55g9w c8b282yb keod5gw0 nxhoafnm aigsh9s9 d3f4x2emmdeji52x a5q79mjw g1cxx5fr lrazzd5p oo9gr5id" dir="auto">Text #2</span></a></div><div class="aahdfvyu"><span class="d2edcug0 hpfvmrgz qv66sw1b c1e"""
re.findall(r'>([^<]+)</span></a></div><div class="aahdfvyu">',text)
结果
['Text #1', 'Text #2']