Quick RegExp问题(我希望)。
我需要根据正则表达式从任何字符串中识别一个子字符串。
例如,请使用以下字符串:
"Blogs, Joe (S0003-000292).html"
"bla bla bla S0003-000292 & so on"
"RE: S0003-000292"
我需要提取'S0003-000292'部分(如果没有找到则标记异常)。
至于我的尝试,好吧,我写了一个粗略的模式来识别S0000-000000:
^\(S[0-9]{4}-[0-9]{6}\)$
我尝试过如下测试:
Dim regex As New Regex("Blogs, Joe (S0003-000292) Lorem Ipsum!")
Dim match As Match = regex.Match("^S[0-9]{4}-[0-9]{6}$")
If match.Success Then
console.writeline "Found: " & match.Value
Else
console.writeline "Not Found"
End If
然而,这总是导致未找到。
所以,真的有两个问题,我的模式有什么问题&如何使用修改后的模式提取子字符串?
(使用.net 2)
编辑: stema指出我正确的方向(即放弃^和$) - 然而这并没有解决问题,我的主要问题是我在RegEx中定义了字符串构造函数而不是模式 - 交换它们并且它工作正常(我责备缺乏caffine):
Dim regex As New Regex("S[0-9]{4}-[0-9]{6}")
Dim match As Match = regex.Match("Joe, Blogs (S0003-000292).html")
If match.Success = True Then
console.writeline "Found: " & match.Value
Else
console.writeline "Not Found"
End If
答案 0 :(得分:7)
你有固定的地方阻止你的模式匹配
^\(S[0-9]{4}-[0-9]{6}\)$
^ ^
^
匹配字符串的开头
$
匹配字符串
并且由于在您想要匹配的部分之前和之后还有其他内容,因此您的模式将不匹配。只需删除那些锚点就可以了。
或者改用字边界
\bS[0-9]{4}-[0-9]{6}\b
如果您的模式之前和之后存在“非单词”字符(非字母或数字), \b
将匹配。
答案 1 :(得分:0)
以下是可以帮助您的代码 注意:我是用c#
写的Regex reg = new Regex("(.)*S[0-9]{4}-[0-9]{6}(.)*");
string str = "Blogs, Joe (S0003-000292) Lorem Ipsum!";
Console.WriteLine(reg.IsMatch(str));
Console.ReadLine();
答案 2 :(得分:0)
Dim reg as new Regex("(.)*S[0-9]{4}-[0-9]{6}(.)*")
Dim str as new string("Blogs, Joe (S0003-000292) Lorem Ipsum!")
MessageBox.show(reg.IsMatch(str))
I am not sure about syntax but this may be a right conversion of my c# code.