如何为这种类型的文本写正则表达式?

时间:2018-04-01 01:22:23

标签: html regex

我试图从以下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'>

3 个答案:

答案 0 :(得分:0)

美元符号是正则表达式中的特殊字符,因此您需要使用反斜杠将其转义。此外,您只想捕获数字,因此您应该使用字符类。

<td>\$(\d+[.]\d\d)<span

正如另一位受访者所提到的,正则表达式会因每种实现语言而有所改变,因此您可能需要进行一些调整,但这应该让您开始。

答案 1 :(得分:0)

我认为你可以选择/[0-9]+\.[0-9]+/

  • [0-9]匹配一个号码。在此示例中,您应该获得数字7
  • 之后的+只是说它应该只查找一个数字。因此[0-9]+将与75匹配。它停在那里因为5之后的字符是句号。
  • 这样说,我们将为正则表达式添加一个句点,并确保它已被转义。一段时间通常意味着&#34;每个角色&#34;。通过逃避它只会寻找一段时间。所以到目前为止我们已/[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]);