使用正则表达式从字符串中提取具有特殊字符的模式

时间:2012-07-10 21:48:21

标签: regex

我正在尝试在VB.NET中使用正则表达式 - 尽管语言可能无关紧要 - 我试图从一个非常大的文件名中提取合理的东西,“\\path\path\path.path.path\path\some_more_stuff_from a name.item_123_456.html

我想从整个混乱中提取“item_123_456

似乎有意义的是,我可以在“.html”这样的模式之前获取所有内容,并从中获取最后一个点之后的所有内容?

我试图至少获得最后一部分(.html之前的整个字符串),但我仍然没有匹配:

Dim matches As MatchCollection
Dim regexStuff As New Regex(".*\\.html")
matches = regexStuff.Matches(strINeed)
Dim successfulMatch As Match
For Each successfulMatch In matches
  strFound = successfulMatch.Value
Next

我尝试过的比赛,希望我甚至可以在点和.html之间得到所有内容:Regex("\\..*\\.html")也没有返回任何内容。

我无法让正则表达式工作......

2 个答案:

答案 0 :(得分:1)

.*\.(.*?)\.html

这会找到尽可能多的字符.*,直至找到(一个点后跟尽可能少的字符后跟一个点html)(\.(.*?)\.html

它将点html和点html之前的点之间的东西放入一个捕获组,该组应该是1美元。如果您需要vb.net代码,我也可能会得到它,但您的代码看起来还不错

您的vb代码应如下所示:

Dim matches As MatchCollection
Dim regexStuff As New Regex(".*\.(.*?)\.html")
matches = regexStuff.Matches(strINeed)
strFound = matches.Item(0).Groups(1).Value.ToString

答案 1 :(得分:1)

它可能会被推广到这个

[^.\\]+\.html

编辑:或者,需要初始点

\.[^.\\]+\.html