我一直坚持找到一个reg表达式来将html元素拆分为2个部分。首先是价格和第二次下载。这是我的HTML,这是我尝试使用的reg表达式。我正在使用一个更糟糕的程序,所以我 cant 使用java-script或jQuery。
HTML:
<h2>$850 / 3Downlaods - Software Name</h2>
Re Expression之前使用了Marker:
/$\/\s*/
重新表达使用标记后:
/\/\
这应该只返回850。没有美元符号。我坚持如何开始和结束下载次数。我需要另一套Before and After正则表达式来提取下载次数。同时不包括“downloads”一词。
我使用的程序是OutWit Hub Scarper Link to docs
答案 0 :(得分:1)
如果<h2>
中没有其他嵌套代码(要考虑更复杂),则由()
分隔的两个/
捕获组应该执行此操作:
/<h2>\s*\$(\d+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/
这会分解为<h2>
,可选空格\s*
,$
,要捕获的一些数字(\d+)
,/
两侧的更多可选空格},一组要捕获的数字,Downloads
之前的更多可选空格,任何字符(非贪婪)直至结束</h2>
。
如果价格部分也可能包含,.
,则(\d+)
组可以替换为([0-9.,]+)
(或者更具体,以确保它不以{{1}开头如果有必要,例如)
,
有关使用正则表达式解析HTML的常见警告适用于此处。只有当您的HTML输入具有可预测性且/<h2>\s*\$([0-9,.]+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/
内没有标记嵌套时,这才能成功。
答案 1 :(得分:1)
试试这个:(?:.*\$)(\d+(?:\.\d+)?).*(\d+)(?:\s*Downloads.*)
这是发生了什么:
(?:.*\$)
- 捕获并丢弃标记的开头,一直到美元符号后找到的第一个数字
(\d+(?:\.\d+)?)
- 获取一美元金额(包括美分)
.*
- 两个数字之间的任何废话
(\d+)
- 下载次数
(?:\s*Downloads.*)
- 标记的其余部分
我希望有所帮助!