约翰的声明:你好,你好吗? - 分裂

时间:2017-03-25 19:17:53

标签: regex vb.net

我目前正在使用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)")

这就是它现在死的原因:

Regex Tester

3 个答案:

答案 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)")

Here's a demo

答案 2 :(得分:1)

您可以使用此正则表达式:

(?=\b|\W)(?!^)

其余代码可以保持不变。

这不会捕获任何字符。它展望未来是否存在单词分词或非字母/数字字符。 (?!^)将阻止在字符串开头立即拆分。