编辑:我让事情变得更加混乱。这是我需要做的。
我有三个文本框
在我的程序中,用户在第一个文本框中键入(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
答案 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
快速学习代码并学习。这就是我为你做这个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”。