正则表达式匹配(替换)span 标记之间出现的所有双引号

Regex match (replace) all occurrences of double quotes in words between span tags

提问人:Pedellen 提问时间:11/2/2021 最后编辑:Andy LesterPedellen 更新时间:11/3/2021 访问量:79

问:

我正在尝试替换两个跨度标签之间出现的所有“ 。

我使用:

(?<=<span>[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§'])*(\")(?=[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§']*<\/span>)

Lookbehind for letters+specialChars

找到 ”

Lookahead for letters+specialChars

但是使用 html 字符串

<span>d"s"s"</span>

它仅匹配上次出现的”

如何匹配(最终替换)标签中所有出现的双引号?

提前致谢。

正则表达式 HTML 解析

评论

2赞 Salman A 11/2/2021
它必须是正则表达式吗?
0赞 Pedellen 11/2/2021
我更喜欢它,因为我已经抓取/匹配了所有 span 标签及其内容,然后再查看它们中的每一个,检查”

答:

0赞 Ryszard Czech 11/3/2021 #1

/(?<=<span>[^<>]*)"(?=[^<>]*<\/span>)/g

请参阅正则表达式证明

解释

--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    <span>                   '<span>'
--------------------------------------------------------------------------------
    [^<>]*                   any character except: '<', '>' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  "                        '"'
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [^<>]*                   any character except: '<', '>' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    <                        '<'
--------------------------------------------------------------------------------
    \/                       '/'
--------------------------------------------------------------------------------
    span>                    'span>'
--------------------------------------------------------------------------------
  )                        end of look-ahead

评论

0赞 Pedellen 11/3/2021
嗯,似乎不起作用?没有捕获任何“字符?
2赞 Bohemian 11/3/2021 #2

不要打扰后面的样子。取而代之的是,匹配 where follows 而不找到早于 ,即在跨度开/关对"</span><span></span>"

"(?=((?!<span>).)*<\/span>)

观看现场演示

分解正则表达式:

  • "字面上的引用
  • (?!<span>).除 of<<span>
  • ((?!<span>).)*任何字符,但不包括<<span>
  • (?=((?!<span>).)*<\/span>)后跟之前遇到的输入</span><span>

评论

0赞 Pedellen 11/3/2021
太好了,它工作得很好,但在以下情况下也有第二个捕获组:<span>“Mads”lkdjff</span>它也选择了一些“正常”字母 - 但它足以使用 :-)
0赞 Bohemian 11/3/2021
@Pedellen正则表达式只使用一个引号字符。正则表达式中的其他所有内容都是向前看(其中包含否定的向前看),环顾四周不会消耗或捕获。此正则表达式不会捕获任何组。