简短版本:我正在尝试构建正则表达式以查明字符串是否包含“0,0,0,0”。我所做的每一次尝试只返回每个字符作为匹配,而不是引号中的完整字符串。
我正在尝试在VB.NET中的文本框内找到字符串中的某些文字。我的问题是,它不是返回一个匹配,而是返回字符串中的每个字符作为匹配。现在通常我认为这是我的正则表达式的一个问题,但是因为我已经验证它应该可以使用几个在线工具,所以我不是百分百肯定。
我想要匹配的字符串是:
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
对于长篇大论的帖子感到抱歉,我只是希望有人帮助我解开我的谜团。
答案 0 :(得分:0)
我不知道您在提供的代码块中使用RegEx
的方式。尝试以下语法(它在C#中)。
System.Text.RegularExpressions.Regex.Split("Input string", "([0.]+)")
答案 1 :(得分: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();
}
}
答案 2 :(得分: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,
答案 3 :(得分: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