我试图从以下HTML中提取价格。
<td>$75.00/<span class='small font-weight-bold text-
danger'>Piece</span></small> *some more text here* </td>
获取数字75.00的正则表达式是什么?
是这样的:
<td>$*/<span class='small font-weight-bold text-danger'>
答案 0 :(得分:0)
美元符号是正则表达式中的特殊字符,因此您需要使用反斜杠将其转义。此外,您只想捕获数字,因此您应该使用字符类。
<td>\$(\d+[.]\d\d)<span
正如另一位受访者所提到的,正则表达式会因每种实现语言而有所改变,因此您可能需要进行一些调整,但这应该让您开始。
答案 1 :(得分:0)
我认为你可以选择/[0-9]+\.[0-9]+/
。
[0-9]
匹配一个号码。在此示例中,您应该获得数字7
。+
只是说它应该只查找一个数字。因此[0-9]+
将与75
匹配。它停在那里因为5
之后的字符是句号。/[0-9]+\./
。[0-9]+
,这样它也会找到其他数字。重要的是,你不要像这样/[0-9]+\.[0-9]+/g
给它一个全球旗帜。除非你想让它找到更多,然后只是第一个数字/句号组合。
您可以使用另一个正则表达式。它使用括号将您正在寻找的部分分组为:/<td>\$(.+)<span/
它将匹配从<td>$
到<span
的所有内容。从那里,您可以过滤掉您正在寻找的群组/部分。请参阅以下示例。
// JavaScript
const text = "<td>$something<span class='small font-weight..."
const regex = /<td>\$(.+)<span/g
const match = regex.exec(text) // this will return an Array
console.log( match[1] ) // prints out "something"
// python
text = "<td>$something<span class='small font-weight..."
regex = re.compile(r"<td>\$(.+)<span")
print( regex.search(text).group(1) ) // prints out "something"
答案 2 :(得分:0)
作为替代方案,您可以使用DOMParser。
将您的<td>
包裹在一个表格中,例如使用querySelector来获取您的元素并从childNodes获取第一个节点。
这会给你$75.00/
。
要删除$
和前瞻性斜杠,您可以使用slice或使用\$(\d+\.\d+)
这样的正则表达式,并从捕获组1中获取值。
let html = `<table><tr><td>$75.00/<span class='small font-weight-bold text-
danger'>Piece</span></small> *some more text here* </td></tr></table>`;
let parser = new DOMParser();
let doc = parser.parseFromString(html, "text/html");
let result = doc.querySelector("td");
let textContent = result.childNodes.item(0).nodeValue;
console.log(textContent.slice(1, -1));
console.log(textContent.match(/\$(\d+\.\d+)/)[1]);