我不知道如何从连接的正则表达式匹配中获取所有第一个匹配的字母。我正在尝试扩展我的知识和正则表达式的使用。
我在下面显示的代码正是我想要做的,但是我希望能够使用正则表达式做同样的事情。我尝试过的正则表达式代码很好地匹配每个单词的第一个字母,一次一个单词,但我想一次获得所有第一个字母而不循环。
If Not myString.Contains("/") And myString.ToUpper() = myString Then
Dim words As String() = myString.Split(" "c)
Dim initials As String = ""
For Each Word As String In words
initials &= Word(0)
Next
DGV1(1, i).Value = initials
End If
我尝试过的正则表达式一次只匹配一个字母:我的字符串 (myString) 就像:DEL REY name CLUB
Dim initial As String = Regex.Match(myString, "\b[a-z][A-Z]")
从显示的示例正则表达式代码中,我想在 DataGridView 单元格中显示第一个字母 DRnC,就像上面显示的非正则表达式方法一样。
我认为最好的方法是找到所有第一个单词字母,然后连接结果:
Dim results As String = String.Concat(Regex.Matches(myString, "\b\p{L}").Cast(Of Match)().Select(Function(m) m.Value).ToList())
在这里,\b\p{L}
查找前面没有字母、数字或连接符标点符号和一些变音符号的任何字母的所有出现。Regex.Matches
匹配字符串中出现的所有匹配项,然后.Cast(Of Match)().Select(Function(m) m.Value).ToList()
将匹配值提取到一个列表中,并将String.Concat
它们连接成一个字符串。
如果您打算使用单个正则表达式方法调用,您可以考虑Regex.Replace
:
Dim results As String = Regex.Replace(text, "\P{L}*(?:(\p{L})\p{L}*|$)", "$1")
在这里,\P{L}*(?:(\p{L})\p{L}*|$)
匹配除字母以外的任何 0+ 字符,然后匹配并捕获到组 1 中的任何字母,然后匹配任何 0+ 字母,或匹配字符串的末尾。该$1
更换恢复了在结果的第一个字的信。
请参阅正则表达式演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句