0

编辑:我让事情变得更加混乱,而不是应该如此。这是我需要做的。

我有三个文本框

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

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

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

     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
4

3 回答 3

1

此正则表达式将为您提供以开放括号开头并以闭合括号结尾的每组子字符串:

 \([^)]*\)

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

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

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)”或类似的字符串,它就很容易分解。

使用 substring 去掉括号,用逗号分割,然后取值。


但是,为了说明,如果您只想要第一组(这是我为您编写此答案时您的问题的阅读方式),这将起作用:

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 的东西。

于 2012-11-23T04:05:30.333 回答
0

这里有很多我不明白的地方。首先,您的用户实际输入的是什么?您要提取什么值?

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

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

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

于 2012-11-23T03:34:03.393 回答
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”。

于 2012-11-23T03:43:17.373 回答