zxf001 发表于 2023-12-7 00:30

正则表达式的问题

查找HTML字符串中所有子串,并且保证子串不在HTML标签内,使用这个正则表达式时(?<!\\<)(?:" + subStr + ")(?!\\>),HTML标签内有两个以上的相同子串会匹配到HTML标签内的子串,如何改进这个正则表达式比如这样的<p我r我>Hello, <b>我world</b>!</p>如果第一个标签内有两个我字,就匹配到标签内了

衍东子 发表于 2023-12-7 08:06

我也不懂 问AI的

你所描述的需求是在HTML字符串中查找所有子串,同时确保这些子串不在HTML标签内。你提供的正则表达式 "(?<!\<)(?:" + subStr + ")(?!\>)" 确实可以匹配不在HTML标签内的子串,但是会出现你提到的问题,即当HTML标签内有两个以上相同的子串时,会匹配到HTML标签内的子串。

为了改进这个正则表达式,你可以考虑使用负向前瞻和负向后顾来确保子串不在HTML标签内。以下是一个可能的改进版本的正则表达式:

javascript
var regex = new RegExp("(?![^<>]*>)" + subStr + "(?![^<]*<)", "g");
这个正则表达式使用了 "(?![^<>]>)" 来确保子串不在任何HTML标签内,而 "(?![^<]<)" 则确保子串不在任何封闭的HTML标签内。通过这样的正则表达式,你可以在HTML字符串中匹配所有不在HTML标签内的子串。

秘密e 发表于 2023-12-7 08:06


有点不太懂你的意思标签内有两个以上的相同子串会匹配到HTML标签内的子

wapjsx 发表于 2023-12-7 08:37

import re

text = '<p我r我>Hello, <b>我world</b>!</p>'

print(re.findall('>([^<]*)',text))

# 输出['Hello, ', '我world', '!', '']


这样可以吗?

ilpj 发表于 2023-12-7 08:44

衍东子 发表于 2023-12-7 08:06
我也不懂 问AI的

你所描述的需求是在HTML字符串中查找所有子串,同时确保这些子串不在HTML标签内。你提 ...

牛,感觉AI理解的比人还好。{:1_937:}

d199212 发表于 2023-12-7 08:56

ilpj 发表于 2023-12-7 08:44
牛,感觉AI理解的比人还好。

其实就是匹配标签内的文本吧

qqycra 发表于 2023-12-7 09:10

用Regex Buddy测试表达式吧,这软件贼好用

zxinyun 发表于 2023-12-7 09:30

(?<!<[^>]+)your_substring(?![^<]*>)

冥界3大法王 发表于 2023-12-7 22:02

问AI正则问题直接出内容,出最终匹配的,让它思考解决。
页: [1]
查看完整版本: 正则表达式的问题