我有一个检测网址的正则表达式:
@"((http|ftp|https)\:\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?";
我将它与 regex.replace 一起使用来从文本中删除网址。
我不希望它替换任何以/images 开头的单词
例如,如果文本是“这是我的文本,这里是链接 http://dfdf.com,我的是/images/dd.gif” 我需要http://dfdf.com替换但不替换/images/dd.gif
我的正则表达式替换了 dd.gif 所以我想否定图像之后的任何单词/
知道如何解决这个问题吗?
最佳答案
您可以在单词边界之后开始匹配,如果紧接着整个“单词”,则匹配失败 images/
使用
\b(?<!\bimages/)(?:(?:http|ftp)s?://)?([\w-]+(?:\.[\w-]+)+)([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?
请参阅regex demo 。 详细信息:
-
\b
- 单词边界 -
(?<!\bimages/)
- 否images/
作为一个整体,单词可以立即出现在左侧 -
(?:(?:http|ftp)s?://)?
-http
的可选序列或ftp
随后是可选的s
然后://
子串 -
([\w-]+(?:\.[\w-]+)+)
- 第 1 组:一个或多个单词或连字符,后跟一个或多个.
序列然后是一个或多个单词或连字符 -
([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?
- 可选的组 2:零个或多个单词字符或.,@?^=%&:/~+#-
中的字符设置,然后是单词字符或@?^=%&/~+#-
中的字符设置。
关于c# - 如何在正则表达式中的特定术语后否定文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66045999/