Visual Basic,查找和替换文本

时间:2019-07-11 09:30:24

标签: vb.net replace textbox

我有这样的字符串:

AABCAABDCEAADAAECDBAACBAA

ABCCABAADCDACADCDAABACCCC

ACCABAAAADCEAECDAAAABACCA

...

...

这些行仅包含字符,而不包含数字。

我需要将这些字符串替换为以下形式,并在文本框中显示结果:

2A,1B,1C,2A,1B,1D,1C,1E,2A,1D,2A,1E,1C,1D,1B,2A,1C,1B,2A

1A,1B,2C,1A,1B,2A,1D,1C,1D,1A,1C,1A,1D,1C,1D,2A,1B,1A,2C,1B,1A

1A,2C,1A,1B,4A,1D,1C,1E,1A,1E,1C,1D,4A,1B,1A,2C,1A

  • 我应该在每个字符后添加一个逗号和空格。
  • 收集相同的字符,并在每个字符的开头添加计数。

我是Visual Basic的新手。我以前在网上搜索“查找和替换”软件,但是它们对我不起作用。我还尝试了Notepad ++(它是插件“ ToolBucket”)。但是它不会保存“查找并替换”设置(仅使用宏)。因此,我从Microsoft网站下载了“ Visual Basic 2010 Express”。感谢您的答复和事先的帮助。

2 个答案:

答案 0 :(得分:0)

通过使用捕获组和该组的backreference \1,可以获取重复的大写字母的数字。

在循环匹配时,您可以将它们添加到集合中,然后使用逗号和空格作为分隔符来打印它们。

然后您可以将该字符串添加到文本框中。

([A-Z])\1*

说明

  • (捕获组
    • [A-Z]匹配一个大写字符
  • )关闭捕获组
  • \1*重复对组1进行0+次反向引用,以获取单个匹配项

Regex demo | VB.NET demo

例如:

Dim str As String = "ACCABAAAADCEAECDAAAABACCA"
Dim pattern As String = "([A-Z])\1*"
Dim list As New List(Of String)
Dim matches As MatchCollection = Regex.Matches(str, pattern)
For Each m As Match In matches
    list.Add(m.Value.Length() & m.Groups(1).Value)
Next m

Console.WriteLine(string.Join(", ", list))

结果

  

1A,2C,1A,1B,4A,1D,1C,1E,1A,1E,1C,1D,4A,1B,1A,2C,1A

答案 1 :(得分:0)

使用正则表达式的方法=>

Dim re As Regex = New Regex("(\w)(\1){0,}", RegexOptions.Compiled)
Dim sString As String = re.Replace("AABCAABDCEAADAAECDBAACBAA", Function(match) match.Length.ToString() + match.Value(0) + ", ")
Dim sResult As String = sString.Remove(sString.LastIndexOf(","))
Console.WriteLine(sResult)

结果=>

2A, 1B, 1C, 2A, 1B, 1D, 1C, 1E, 2A, 1D, 2A, 1E, 1C, 1D, 1B, 2A, 1C, 1B, 2A