已经有一段时间了,因为我使用了正则表达式,我希望我正在尝试做的事情是可能的。我有一个程序可以发送关于特定文件的自动响应,我想在我知道永远不会改变的两个单词之间抓取文本。在这个例子中,这些词是“关于”和“发送”
Dim subject As String = "Information regarding John Doe sent."
Dim name As String = Regex.IsMatch(subject, "")
所以在这种情况下,我希望能够得到“John Doe”。我提出的每个正则表达式都包含“关于”和“已发送”等字样。如何将这些单词用作边界但不包括在匹配中?
答案 0 :(得分:3)
假设"Information regarding "
和"sent."
永不改变,您可以使用捕获组获取"John Doe"
:
^Information regarding (.+) sent.$
你用这种方式:
Dim regex As New Regex("^Information regarding (.+) sent.$")
Dim matches As MatchCollection = regex.Matches(subject)
现在,它只应匹配一次,您可以从匹配的Groups属性中获取组:
For Each match As Match In matches
Dim groups As GroupCollection = match.Groups
Console.WriteLine(groups.Item(1).Value) // prints John Doe
Next
答案 1 :(得分:0)
你的正则表达式基本上应该是这样的:
.*regarding (.+) sent.*
您正在寻找的数据将位于第一个捕获变量中(Perl中为1美元)。
答案 2 :(得分:0)
虽然匹配所有组是一种做法,但我会使用两个不匹配的组和一个名为froup的组,以便它只返回您想要的组。这会给你正则表达式:
(?:regarding )(?<filename>.*)(?: sent)
这将使您能够从组中调用文件名,例如
Dim rx As New Regex("(?:regarding )(?<filename>.*)(?: sent)", _
RegexOptions.Compiled )
Dim text As String = "Information regarding John Doe sent."
Dim matches As MatchCollection = rx.Matches(text)
'The lazy way to get match, should print 'John Doe'
Console.WriteLine( matches[0].Groups.Item("filename").Value )
在msdn网站here
上找到了一个很好的Regex资源