我有这样的字符串:
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”。感谢您的答复和事先的帮助。
答案 0 :(得分:0)
通过使用捕获组和该组的backreference \1
,可以获取重复的大写字母的数字。
在循环匹配时,您可以将它们添加到集合中,然后使用逗号和空格作为分隔符来打印它们。
然后您可以将该字符串添加到文本框中。
([A-Z])\1*
说明
(
捕获组
[A-Z]
匹配一个大写字符)
关闭捕获组\1*
重复对组1进行0+次反向引用,以获取单个匹配项例如:
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