如何在字符串拆分期间找到使用的分隔符(VB.NET)

时间:2010-04-26 01:10:01

标签: vb.net regex string split

假设我有一个字符串,我希望根据多个字符进行拆分,例如".""!""?"。我如何确定哪一个字符分裂我的字符串,以便我可以将相同的字符重新添加到相关分割片段的末尾?

    Dim linePunctuation as Integer = 0
    Dim myString As String = "some text. with punctuation! in it?"

    For i = 1 To Len(myString)
        If Mid$(entireFile, i, 1) = "." Then linePunctuation += 1
    Next

    For i = 1 To Len(myString)
        If Mid$(entireFile, i, 1) = "!" Then linePunctuation += 1
    Next

    For i = 1 To Len(myString)
        If Mid$(entireFile, i, 1) = "?" Then linePunctuation += 1
    Next

    Dim delimiters(3) As Char
    delimiters(0) = "."
    delimiters(1) = "!"
    delimiters(2) = "?"

    currentLineSplit = myString.Split(delimiters)

    Dim sentenceArray(linePunctuation) As String
    Dim count As Integer = 0

    While linePunctuation > 0

        sentenceArray(count) = currentLineSplit(count)'Here I want to add what ever delimiter was used to make the split back onto the string before it is stored in the array.'

        count += 1
        linePunctuation -= 1

    End While

4 个答案:

答案 0 :(得分:3)

如果您将捕获组添加到正则表达式中,请执行以下操作:

SplitArray = Regex.Split(myString, "([.?!])")

然后返回的数组既包含标点符号之间的文本,也包含每个标点符号的单独元素。 .NET中的Split()函数包括通过捕获返回数组中的组匹配的文本。如果你的正则表达式有几个捕获组,它们的所有匹配都包含在数组中。

将您的样本分成:

some text
.
 with punctuation
!
 in it
?

然后,您可以遍历数组以获取“句子”和标点符号。

答案 1 :(得分:0)

.Split()不提供此信息。

你需要使用正则表达式来完成你所追求的目标,我推测这是希望通过分割标点符号将英语段落分成句子。

最简单的实现看起来像这样。

var input = "some text. with punctuation! in it?";
string[] sentences = Regex.Split(input, @"\b(?<sentence>.*?[\.!?](?:\s|$))");
foreach (string sentence in sentences)
{
    Console.WriteLine(sentence);
}

结果

some text.
with punctuation!
in it?

但是你会很快发现这种语言,就像人类说的那样,大多数时候并不遵循简单的规则。

这是在VB中的ya:

Dim sentences As String() = Regex.Split(line, "\b(?<sentence>.*?[\.!?](?:\s|$))")
祝你好运。

答案 2 :(得分:0)

你可以使用LINQ

请参阅此link以获取一个很好的示例

答案 3 :(得分:-1)

一旦你用全部3个字符调用Split,你就会抛弃这些信息。你可以通过分裂自己或一次分裂一个标点符号来做你想做的事。