如何在正则表达式中选择href值?

时间:2019-04-01 06:41:01

标签: regex

我正在尝试获取所有href值,但无法获得正确的结果,请帮助我们。

我尝试过这种模式

(?[\ w-] +)\ s * = \ s *((?:“(?[^”>] +)))

这是链接 DataFrame.all

示例:

<a href="#" lclick="Test_Navi('page:6f66f6dd')">
<A HREF = "page:9477be:The Page "Test Detail"">

**Output**:

Match 1:
Name    href
Value   #

Match 2:
Name:   lclick
Value:  Test_Navi('page:6f66f6dd')

Match 3:
Name:   HREF
Value:  page:9477be:Der Dialog

**Expected Output**:
Match 1:
Name    href
Value   #

Match 2:
Name    lclick
Value   Test_Navi('page:6f66f6dd')

Match 3:
Name    HREF
Value   page:9477be:Der Dialog "Test Detail"

2 个答案:

答案 0 :(得分:1)

如果您确实需要名称/值的东西,那么 而不是所有单词都使用href [\ w-] + => href

(?<name>href)\s*=\s*((?:"(?<Value>[^">]+)))

答案 1 :(得分:1)

尽管您不应该使用正则表达式来解析/处理html,但是对于简单的文本提取,您可以使用此正则表达式从group1中获取所需的匹配项,

\w+\s*=\s*"([^=]*)"

说明:

  • \w+-匹配一个或多个单词\w[a-zA-Z0-9_])字符
  • \s*=\s*-匹配=,周围有可选的空白字符
  • "([^=]*)"-这是正则表达式的关键部分,可将其与其他答案区分开来,并使其按预期工作。您要捕获的值中也包含双引号,因此无法使用[^"]+,而使用".*"会捕获更多的值。这里的关键是您所有的键值对都用=隔开,因此值不能包含此字符,因为我使用[^=]*字符来捕获值,所以贪婪地使用里面存在的双引号也会被捕获,并期望最后一个是"([^=]*)"所在的地方,并按需要完成工作。

Demo

正则表达式的扩展版本就是这个

(?<Name>[\w-]+)\s*=\s*((?:"(?<Value>[^=]+)"))

Rubular demo