使用正则表达式提取括号内的文本及其显示的实例

时间:2012-11-23 02:52:07

标签: .net regex vb.net string visual-studio-2010

编辑:我让事情变得更加混乱。这是我需要做的。

我有三个文本框

在我的程序中,用户在第一个文本框中键入(this) is (this)

当按下按钮时,我需要提取括号中的第一个字符串并将其放在textbox2中,然后从括号中的第二个字符串中提取文本并将其放在textbox3中。我该怎么做?

编辑:我现在正在使用David的建议,但它没有返回值。这就是我使用它的方式:

     Dim expression As New Regex("\((.*)\)\s*is\s*\((.*)\)")
     ' expression = "\((.*)\)\s*is\s*\((.*)\)"
         Dim matches As MatchCollection = Regex.Matches(CurrentInstruction, expression.ToString())
          MessageBox.Show(matches.Item(0).ToString() & "" & matches.Item(1).ToString())

这就是我输入的内容:

if ComparePixelColor (25,15) is (27) = true then

3 个答案:

答案 0 :(得分:1)

这个正则表达式将为您提供每一个以开放式paren开头并以封闭式paren结尾的子串:

 \([^)]*\)

虽然你没有问,但我怀疑你会想要解析第二个带括号的组中的颜色参数。

此基本代码演示了如何使用正则表达式提取带括号的组。

dim paren as new RegEx("\([^)]*\)")
dim command as string = "Prefix (123, 45) if (blue)"

dim matches as MatchCollection

matches = paren.Matches(command)

matches.Dump()

dim m as Match

for each m in matches
   Console.WriteLine("M='{0}'", m)
next

一旦你的字符串只包含“(123,45)”或类似字符串,就很容易分解。

使用子字符串去掉括号,在逗号上拆分,然后取值。


然而,为了说明,如果你只想要第一组(这是我在为你写这个答案时你的问题的读法),这将有效:

dim paren as new RegEx("\([^)]*\)")
dim command as string = "Prefix (123, 45) if (blue)"

dim matches as MatchCollection
dim m as Match

m = paren.Match(command)

dim ms as string = m.Value

ms = ms.Substring(1, ms.Length -2) ' Take off the parens

dim parts as string() = ms.Split(",")

dim x as string = parts(0).Trim()
dim y as string = parts(1).Trim()

我强烈推荐免费的linqpad

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fwww.linqpad.net%2F&ei=SPauUM3oGK640gGNroGYAg&usg=AFQjCNFw-ZpPkP4je7u9udiur5Wg5us7tQ

快速学习代码并学习。这就是我为你做这个VB代码的方式,即使我经常在C#中编写.Net内容。

答案 1 :(得分:0)

我有很多不明白的地方。首先,您的用户实际键入了什么?你想提取什么价值?

其次,如果if CompareThese之类的东西是输入的一部分,那么听起来他们正在编写程序,语法紧凑,区分大小写和语言单词。如果是这样,那么它必须是语言解析器的一部分,这超出了你的问题的范围。否则,他们究竟能输入什么?

除此之外,我想知道括号是否是输入内容的一部分,或者它们只是在问题文本中标记值的位置?

要回答您的问题,如果它们是整数,您可以仅使用x提取y[0-9]+。我不知道colour可能是什么

答案 2 :(得分:0)

一个简单的正则表达式应匹配括号内的两个值。如果用户输入的格式为(x)为(y):

Dim matches As MatchCollection = Regex.Matches(userInput, "\((.*)\)\s*is\s*\((.*)\)")

matches.Item(0)应包含x的值,matches.Item(1)应包含y。如果matches.Count等于0,则userInput与表达式不匹配。请注意,这包括括号内的任何字符。

例如,用户输入为:

(25,15) is (27)

两场比赛将分别为“25,15”和“27”。