假设我有一个字符串,我希望根据多个字符进行拆分,例如"."
,"!"
和"?"
。我如何确定哪一个字符分裂我的字符串,以便我可以将相同的字符重新添加到相关分割片段的末尾?
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
答案 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
,你就会抛弃这些信息。你可以通过分裂自己或一次分裂一个标点符号来做你想做的事。