【问题标题】:Regex to parse a string and match a URL or folder path正则表达式解析字符串并匹配 URL 或文件夹路径
【发布时间】:2013-05-09 18:01:20
【问题描述】:

我正在尝试更改将匹配诸如http://www.google.com 之类的网址的正则表达式,并允许它匹配诸如j:\Folder\Name\Here 之类的文件夹名称

我正在解析消息中可能存在的任何链接的文本,并使用匹配的字符串创建 Process.Start(string) 调用。

我现在的正则表达式如下所示:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’]))

我认为我可以添加到 /{1,3} 部分以匹配 \{1,1} 也可能有效,但似乎并非如此。

我不确定正则表达式到底在做什么,因为我不是自己写的。

是否有人已经有一个可以匹配 URL 以及文件系统文件夹路径的正则表达式的工作示例?或者有没有办法改变这个现有的正则表达式来达到这个目的?

【问题讨论】:

  • 我建议您使用 2 个正则表达式:一个用于 Internet URL,一个用于文件系统路径。将两者都放在一个表达式中会使它变得急切(处理缓慢)并且更难理解和维护。
  • 我建议你根本不要使用正则表达式;对 URL 使用单独的代码路径,使用 Uri 类和文件路径,使用 FileInfo 类。这些类已经处理了解析、匹配、提取组件等等。
  • @AndreCalil 我在开车去吃午饭时想到了这一点。使用 2 个正则表达式非常有意义,并且它们每个都有其特定的目的。这就是我将尝试实现的。
  • @ZackT。好的。我相信您会在互联网上轻松找到这些正则表达式。如果您有任何其他问题,请告诉我们。
  • 您可能会发现this 站点很有用。有关 URL,另请参阅 this answer。我的建议是有两个正则表达式,一个用于文件夹,一个用于 URL,然后将它们组合成一个。

标签: c# .net regex


【解决方案1】:

你试过了吗:

[^ ]+?:(//[^ ]*|\\.+\\[^ ]*)

它将匹配:

http://www.google.com

C:\windows\temp internetfiles\

在字符串where http://www.google.com is the way to go if you want to save your file to C:\windows\temp internetfiles\ quick and easy

【讨论】:

  • 我根据 Dour High Arch 对 Uri 和 FileInfo 类的反馈提出了一个类似的新问题。 stackoverflow.com/questions/19230073/… 新问题更清楚地说明了我在从字符串解析 URL 或文件路径时尝试做的事情。
猜你喜欢
  • 2016-12-11
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多