提问人:raquelhortab 提问时间:11/25/2021 最后编辑:raquelhortab 更新时间:11/25/2021 访问量:104
正则表达式用于在使用 < 编码代码时匹配除 HTML 标记之外的任何内容和 >
Regex to match anything except HTML tags when code is encoded using < and >
问:
我正在尝试使用正则表达式来匹配除 HTML 标签以外的任何文本。我为“普通”HTML代码找到了这个解决方案:
<[^>]*>(*SKIP)(*F)|[^<]+
但是,我的代码是使用 and 而不是 和 编码的,我无法修改上面的正则表达式以使其正常工作。<
>
<
>
例如,给定文本:
Hi <p class=\"hello\">\r\nthere, how are you\r\n</p>
我需要匹配“嗨”和“那里,你好吗”。请注意,在此示例中,我还需要匹配不在标签之间的文本“hi”。
更新:由于我使用的是 ruby 的 gsub,看起来我什至不能使用 *SKIP 和 *F
更新2:我试图不透露太多细节,但似乎很重要:
我实际上需要替换文本中的所有空格,但不需要替换那些属于标签的空格,无论是标签还是标签。< ... >
<...>
答:
1赞
Wiktor Stribiżew
11/25/2021
#1
你可以使用
text = text.gsub(/(<.*?>|<[^>]*>)|[[:blank:]]/m) { $1 || '_' }
我建议不要,因为我假设您不想替换换行符。查看 Ruby 演示。[[:blank:]]
\s
上面的正则表达式匹配
(<.*?>|<[^>]*>)
- 要么 ,任何零个或多个字符尽可能少,或者 ,然后是零个或多个字符,然后是 和<
>
<
>
>
|
-或[[:blank:]]
- 任何单个水平空格(您也可以用于匹配任何 Unicode 水平空格)。[\p{Zs}\t]
替换中的块意味着当组 1 匹配时,组 1 值将按原样返回,否则将作为水平空格的替换返回。{ $1 || '_' }
_
评论
(?s)<.*?>
<(?:(?!>)[\s\S])*>(*SKIP)(*F)|(?:(?!<)[\s\S])+