如何使用Regex将多个匹配作为单个字符串

时间:2014-09-23 01:26:35

标签: .net regex vb.net string winforms

我的表单上有一个文本框,其中包含任意文本字符串,例如"Hello 184;%88 World"中输入的用户。

我有三个文本框,一个只显示输入的数字/数字,下一个只显示包含在字符串中的字母,最后一个文本框只显示字符串中的符号或特殊字符。

到目前为止,我已尝试使用For Each语句循环遍历字符串但我对此并不满意所以我决定坚持使用VB.net的Regex类。以下是我可以在文本框中显示字符串中数字和数字的内容:

Private Sub ScanButton_Click(ByVal sender as System.Object, ByVal e As System.EventArgs) Handles ScanButton.Click

Dim TextEntry As String = StringBox.Text 

Dim IntResult As Match = Regex.Match(TextEntry, "\d+")

Numbox.Text = IntResult.Value

End Sub

我已导入System.Text.RegularExpressions

例如,在我输入后:

“ashsjshsuie14568 hdidihgsib2822”

字符串中数字的文本框仅显示14568省略2822

我不知道如何使字母中的字母和符号出现在各自的文本框中。

1 个答案:

答案 0 :(得分:2)

你有正确的想法,但你可以有多个匹配,所以只获得Regex.Match的结果将只返回第一个匹配。相反,如果您想使用匹配,请改用Regex.Matches

然而,更好的想法,可能是替换你不想要的字符串,而不是试图找到你做的那些:

Dim textEntry As String = StringBox.Text 
Dim intResult As String = Regex.Replace(textEntry, "\D", "")
Dim letterResult As String = Regex.Replace(textEntry, "[^a-zA-Z]", "")
Dim symbolResult As String = Regex.Replace(textEntry, "[0-9a-zA-Z]", "")

在上面的示例中,intResult删除了所有非数字字符(\D类匹配的内容),letterResult删除了除az之外的所有内容,symbolResult删除了数字和字母。这应该产生你想要的东西。