c# - 如何在正则表达式中的特定术语后否定文件名

标签 c# regex

我有一个检测网址的正则表达式:

 @"((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/

相关文章:

c# - C#中先验算法的数据挖掘问题

C# 编译器优化

regex - 如何将 REGEX 应用于 Google 电子表格中的整列?

.net - 正则表达式替换单词中间的连字符

java - 使用正则表达式从字符串中提取数字

C#单元测试题

c# - A 从已经工作的一个创建了一个新的 CustomModelBinder。为什么新人永远不会被要求进行任何绑定(bind)?

c# - 如何避免多次 if null 检查

java - 正则表达式检测空行作为结束

javascript - 如何在 UI 中渲染一个数字,每 4 个字符后有一个空格?