1

短いバージョン: 文字列に「0,0,0,0」が含まれているかどうかを調べる正規表現を作成しようとしています。私が行ったすべての試みは、引用符内の完全な文字列ではなく、各文字を一致として返すだけです。

VB.NETのテキストボックス内の文字列内で特定のテキストを見つけようとしています。私の問題は、1 つの一致を返す代わりに、文字列内の各文字を一致として返すことです。通常、正規表現の問題だと思いますが、いくつかのオンライン ツールで動作することを確認したので、100% 確信はありません。

一致させようとしている文字列は次のとおりです。

0,0,0,0

一致を見つけようとしている文字列は次のようになります。

Image(0,0,0,0,"Path")

私は FastColoredTextBox と呼ばれるコントロールを使用しています。これにより、特定の文字列のカラー スタイルやその他のカスタム スタイルの範囲を設定できます。以下は、私が通常スタイル範囲を追加する方法です。

現在、単語をクリック可能にする機能を追加したので、正規表現を取得して、クリック可能にしたい文字列の一致を作成しようとしています。例えば:

これが正規表現です。

Private Sub tb_textchanged(ByVal sender As System.Object, ByVal e As TextChangedEventArgs)

    ' This is working code to make the word Path clickable in the above string:
    e.ChangedRange.SetStyle(ellipseStyle, "\bPath\b", RegexOptions.IgnoreCase)

    ' When I use these ones it returns each character as a match and not the full string. The mystery...
    e.ChangedRange.SetStyle(ellipseStyle, "0,0,0,0", RegexOptions.IgnoreCase)

    e.ChangedRange.SetStyle(ellipseStyle, "(0,){4}", RegexOptions.IgnoreCase)
End Sub

ユーザーが正規表現を使用して範囲として設定された単語をクリックすると (上記の例)、その単語がクリック可能になります。ユーザーが単語をクリックすると、正規表現で指定された範囲全体が選択されます。これを除いて、各「0」と「、」を独自の一致として返すため、単一の文字のみを返す/選択します。

理解を深めるために単語をクリックするコードを次に示します。これには正規表現は含まれませんが、上記の textchanged イベントには含まれます。

Private Sub tb_VisualMarkerClick(sender As Object, e As VisualMarkerEventArgs)
    Dim page As RadPageViewPage = RadPageView1.SelectedPage
    Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
    txt.Invalidate()
    txt.Selection.Start = New Place((TryCast(e.Marker, RangeMarker).range).Start.iChar, (TryCast(e.Marker, RangeMarker).range).Start.iLine)
    txt.SelectionLength = (TryCast(e.Marker, RangeMarker).range).Text.Length
    Dim ClickedWord As String = (TryCast(e.Marker, RangeMarker).range.Text)
    If ClickedWord = "Path" Then
        Dim ofd As New OpenFileDialog
        ofd.FileName = ""
        ofd.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg"
        If ofd.ShowDialog = DialogResult.OK Then

            txt.InsertText(ofd.FileName)
        End If
    ElseIf ClickedWord = "0,0,0,0" Then
        'What I am going to do when found.
    End If
End Sub

長い文章で申し訳ありませんが、誰かが私の謎を解決するのを手伝ってくれることを願っています.

4

4 に答える 4

0

このコンソールアプリケーションを調べてください。

class Program
{
    static void Main(string[] args)
    {
        string sPattern = "0,0,0,0";
        string s = "i am looking for  0,0,0,0";

        if (System.Text.RegularExpressions.Regex.IsMatch(
                s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
        {
            System.Console.WriteLine("  (match for '{0}' found)", sPattern);
        }
        else
        {
            System.Console.WriteLine();
        }
        Console.ReadLine();
    }
}
于 2012-12-27T07:28:23.847 に答える
0

RegExあなたが提供したコードブロックであなたがどのように使用しているかわかりません。以下の構文を試してください (C# にあります)。

System.Text.RegularExpressions.Regex.Split("Input string", "([0.]+)")
于 2012-12-27T05:01:17.587 に答える
0

あなたが何をしようとしているのか理解できません。

文字列に 0,0,0,0 などのパターンが含まれているかどうかを確認するには、次のようにします。

string input = "Image(0,0,0,0,\"Path\")";
string pattern = "0,0,0,0";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);


Console.WriteLine(input.Contains(pattern)); //true
Console.WriteLine(regex.IsMatch(input)); //true
于 2012-12-27T11:48:42.557 に答える
0

My Regex Testerを使用しました。生成されるコードは次のとおりです。

Imports System.Text.RegularExpressions
Module Module1
    Sub Main()
        Dim sourcestring As String = "Replace with your source string"
        Dim re As Regex = New Regex("(0,){4}", RegexOptions.IgnoreCase)
        Dim mc As MatchCollection = re.Matches(sourcestring)
        Dim mIdx As Integer = 0
        For Each m As Match In mc
            For groupIdx As Integer = 0 To m.Groups.Count - 1
                Console.WriteLine("[{0}][{1}] = {2}", _
                                  mIdx, _
                                  re.GetGroupNames(groupIdx), _
                                  m.Groups(groupIdx).Value)
            Next
            mIdx = mIdx + 1
        Next
    End Sub
End Module

入力テキスト:

Image(0,0,0,0,"Path")

出力結果:

[0][0] = 0,0,0,0,
[0][1] = 0,
于 2012-12-27T07:52:26.073 に答える