我的意见是:
<span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>
我希望我的正则表达式与此匹配
<span question_number="somenumber">xxxx</span>
模式
并且所需的输出是1.somenumber 2.xxxx
我写了一个天真的解决方案,可以涵盖了
<span question_number="18"> blah blah blah 1</span>
<span question_number="19"> blah blah blah 2</span>
注意:他们在不同的路线上
输出为:18
,blah blah blah 1
和19
,blah blah blah 2
但输入为<span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>
时
这是在同一行
我的输出为18
,blah blah blah 1</span><span question_number="19"> blah blah blah 2
我怎么能绕过这个问题?
更新:
正则表达式:\<span question_number=(?:\")*(\d*)(?:\")*>(.*)<\/span>
testinput:
case1 - &gt;两行代码
<span question_number="54">often graces doorways tied into ropes called</span>
<span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>
case2 - &gt;一行代码
<span question_number="54">often graces doorways tied into ropes called</span><span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>
答案 0 :(得分:2)
如果您已经在使用JavaScript / HTML,而不是使用正则表达式从html中提取数据,那么使用浏览器中已有的DOM查询工具通常要容易得多。
const d = document.createElement("div");
d.innerHTML = yourSpanContent;
Array.from(d.querySelectorAll("span")).map(span =>
`1. ${span.getAttribute("question_number")} 2. ${span.innerText}`
);
如果您使用的HTML已经在DOM中,那么您可以从该DOM中进行选择,并基本上删除前两行。
答案 1 :(得分:0)
这将匹配span标记中的任何内容,无论它在一行中的位置。
/(<span[^>]*>)[^<]*(<\/span>)/g
你可以发布你的代码吗?