2012-12-27 200 views
1

简短版本:我试图构建正则表达式以查明一个字符串是否包含“0,0,0,0”。我所做的每一个尝试都只是将每个字符作为匹配返回,而不是引号内的完整字符串。正则表达式模式在VB.NET中无法正常工作

我想在VB.NET的文本框内的字符串中找到某些文本。我的问题是,不是返回一个匹配,而是返回字符串中的每个字符作为匹配。现在通常我会认为这是我的正则表达式的一个问题,但是由于我已经验证它应该与一些在线工具一起工作,所以我不是100%确定的。

我想匹配的字符串是:

0,0,0,0 

我试图找到看起来像这样的匹配字符串:

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

我使用了一个名为FastColoredTextBox控制,它允许为特定的字符串设置颜色样式和其他自定义样式的范围。以下是我通常如何添加样式范围。

目前,我添加了让单词可点击的功能,所以我试图让正则表达式为我想要点击的字符串构建匹配。例如:

这里是正则表达式。

​​

当用户点击正在使用正则表达式(实施例的此上文)设置为一个范围的话,它使字点击。当用户点击单词时,它会选择正则表达式中指定的整个范围。除了这个返回每个“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 

对不起,我只是希望有人能帮我解开我的神秘。

+1

你能否添加一个问号,它很难看到你实际要问什么。 –

+0

RegEx在哪里?我知道你觉得RegEx是正确的,但如果它匹配单个字符而不是整个字符串,那几乎肯定是RegEx。 –

+0

我知道你是从迈克尔来的,这正是我的想法。我也尝试过Vjays正则表达式,我也收到单个字符。你可以建议正则表达式来查找该字符串是否包含0,0,0,0? – user1632018

回答

0

我没有得到你在你提供的代码块中如何使用RegEx。尝试下面的语法(它在C#中)。

System.Text.RegularExpressions.Regex.Split("Input string", "([0.]+)") 
+0

正则表达式不在代码块中,它在我之前添加的代码片段中。 e.changedrange.setstyle。这些代码片段在我的textchanged事件中。 – user1632018

+0

感谢您的帮助。我在我的代码中尝试了你的正则表达式,并且它返回字符串中的每个0。 – user1632018

+0

你可以给我输入字符串你的传球。当我尝试使用“0.0.0.0.somthing”。它返回“0.0.0.0” –

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(); 
    } 
} 
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, 
+0

如果它仍然不工作,请尝试转义逗号? – Larry

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 
相关问题