0

編集:私は物事をもっと混乱させました。これが私がする必要があることです。

私は3つのテキストボックスを持っています

私のプログラムでは、ユーザー(this) is (this)は最初のテキストボックスに入力します。

ボタンが押されたら、角かっこで囲まれた最初の文字列を抽出してtextbox2に入れ、次に角かっこで囲まれた2番目の文字列からテキストを抽出して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
4

3 に答える 3

1

この正規表現は、開いたパレンで始まり、閉じたパレンで終わるサブストリングのすべてのセットを取得します。

 \([^)]*\)

質問はしていませんが、2番目の括弧で囲まれたグループの色パラメーターを解析することをお勧めします。

この基本的なコードは、正規表現を使用して括弧で囲まれたグループを抽出する方法を示しています。

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&q3%esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fwww.linqpad.net%2F&ei=SPauUM3oGK640gGNroGYAg&usg=AFQjCNFw

コードをすばやく実験して学習します。私は通常C#で.Netのものを書いていますが、それが私があなたのためにこのVBコードを作成した方法です。

于 2012-11-23T04:05:30.333 に答える
0

ここでわからないことがたくさんあります。まず、ユーザーは実際に何を入力しますか?そして、あなたが抽出したいのはどのような価値ですか?

次に、のようなものif CompareTheseが入力の一部である場合、厳密な構文、大文字と小文字の区別、および言語の単語を使用してプログラムを作成しているように聞こえます。もしそうなら、それはあなたの質問の範囲をはるかに超えている言語パーサーの一部でなければなりません。そうでなければ、彼らは正確に何をタイプすることができますか?

それを超えても、括弧は入力されたものの一部なのか、それとも質問のテキストの値の場所を示すだけなのか、疑問に思います。

あなたの質問に答えるために、それらが整数である場合にのみ抽出xyて使用することができます。[0-9]+何なのかわからcolourない

于 2012-11-23T03:34:03.393 に答える
0

単純な正規表現は、括弧内の2つの値と一致する必要があります。ユーザー入力の形式が(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)

2つの試合はそれぞれ「25,15」と「27」になります。

于 2012-11-23T03:43:17.373 に答える