问题: 我想创建一个正则表达式来检测' M'在开始时寻找' ^'作为结束。我的问题是我希望我的正则表达式只检测单行字符串中的所有实例,然后输出它们。
示例:
字符串:M123456789 ^ M123 ^ C123 ^ M1234 ^
输出应为:
Notice that I reject 'C123^' because it doesnt start on 'M'.
到目前为止,我在这里有一个正常的表达式来检测' M'但是我在操作它时遇到了问题。
这是我的代码:
Sub Main()
Dim str As String = "MLIVEOKK0S0^MRNS02K0S0^CKILL^"
Console.WriteLine("Matching words that start with 'S': ")
showMatch(str, "\b^\S*")
Console.ReadKey()
End Sub
Sub showMatch(ByVal text As String, ByVal expr As String)
Console.WriteLine("The Expression: " + expr)
Dim mc As MatchCollection = Regex.Matches(text, expr)
Dim m As Match
For Each m In mc
Console.WriteLine(m)
Next m
End Sub
答案 0 :(得分:1)
尝试这种模式
"(M [^ \ ^] + \ ^)"
模式分解:
代码示例:
M123456789^
M123^
M1234^
结果:
Imports System
Public Module Module1
Public Sub Main()
Dim data As String = "M123456789^M123^C123^M1234^"
Dim mIndex = data.IndexOf("M")
Dim caretIndex = data.IndexOf("^", mIndex + 1)
While mIndex > -1
If (caretIndex > -1)
Console.WriteLine(data.Substring(mIndex, caretIndex - mIndex + 1))
Else
Console.WriteLine(data.Substring(mIndex))
End If
' Search for the next match
mIndex = data.IndexOf("M", caretIndex)
caretIndex = data.IndexOf("^", mIndex + 1)
End While
End Sub
End Module
如果正则表达式太复杂而无法理解,那么这是一种非正则表达式方法
**Integer** cannot be converted to **Byte**
答案 1 :(得分:1)
我建议这个site进一步阅读正则表达式。您可以使用以下内容:
Dim input As String = "M123456789^M123^C123^M1234^"
For Each m As Match In Regex.Matches(input, "M[^^]*\^")
Console.WriteLine(m.Value)
Next
<强>输出强>
M123456789^
M123^
M1234^
正则表达式首先匹配&#34; M&#34;然后使用否定字符类,该字符类匹配除^
&#34;零或更多&#34;之外的任何字符。然后终于寻找并匹配结束的插入符号。
答案 2 :(得分:1)
您可能需要考虑非正则表达式方法。当你真正需要它时,正则表达式很好,但它只是一个只写的#34;编码风格,可以使未来的维护变得困难。
尝试使用这种LINQ方法:
hour to hour
我得到了理想的结果: