我目前正在使用VB.net,在我的任务中,我需要压缩文件,但我需要它来执行以下操作:
例如:John的声明:你好,你好吗?
这需要分成:
1.John
2.'
3.s
4.
5.Statement
6.:
7.
8.Hello
9.,
10.
11.How
12.
13.are
14.
15.you
16.?
这就是我的尝试:
Dim Sentence As String
Dim Words() As String
'Ask user to input a sentence into the system'
Console.WriteLine("Enter the sentence: ")
Sentence = Console.ReadLine()
Console.Clear()
Words = Regex.Split(Sentence, "(\b[^\s]+\b)")
这就是它现在死的原因:
答案 0 :(得分:1)
使用 Linq 尝试正则表达式Split
(C#实现):
string source = "John's Statement: Hello, How are you?";
var result = Regex
.Split(source, @"(\W)") // split on non-word letters, preserve splitter
.Where(item => !string.IsNullOrEmpty(item));
测试
Console.Write(string.Join(Environment.NewLine, result
.Select((v, i) => $"{i + 1,2}. {v}")));
结果:
1. John
2. '
3. s
4.
5. Statement
6. :
7.
8. Hello
9. ,
10.
11. How
12.
13. are
14.
15. you
16. ?
答案 1 :(得分:1)
您可以使用正向前瞻((?=...)
)进行拆分,如下所示:
(?=\s|\b)
这匹配任何紧跟空格或边界的地方。
因此,您的split命令将变为:
Words = Regex.Split(Sentence, "(?=\s|\b)")
答案 2 :(得分:1)
您可以使用此正则表达式:
(?=\b|\W)(?!^)
其余代码可以保持不变。
这不会捕获任何字符。它展望未来是否存在单词分词或非字母/数字字符。 (?!^)
将阻止在字符串开头立即拆分。