【问题标题】:Regex.Split Unity3dRegex.Split Unity3d
【发布时间】:2016-03-05 21:59:16
【问题描述】:

我正在尝试使用 Regex.Split 和以下模式创建一个字符串数组:(?s)(?=label).+?(?=label) 测试于regex101

我想在一个数组中填充单词'label'之间的文本块, 我试图分解的文本块有点像:

*标签 1
呜呜呜
#东西
更多的东西

*标签 2
哒哒哒
#dum de do
等等等等

*标签 3
等等……

所以(例如)我想要 BookData[0] =

标签 1
呜呜呜
#东西
更多的东西

*

我在 Unity 中,顶部有 using System.Text.RegularExpressions;,然后我有:

string pattern = "(?s)(?=label).+?(?=label)";

    string[] BookData = Regex.Split(input,pattern);

    Debug.Log(BookData[0]);

我没有得到任何结果,请帮助。 (非常感谢)

【问题讨论】:

  • 一审,改为Debug(input +" " +BookData[0]);
  • 您需要使用此正则表达式进行匹配,而不是拆分。如果可以使用 LINQ,请使用 string[] BookData = Regex.Matches(input, pattern).Cast<Match>().Select(p => p.Value).ToArray();。我还建议使用 (?s)\blabel\b(?:(?!\blabel\b).)* 正则表达式。
  • 非常感谢,我试试看。
  • 只需在我的正则表达式中使用逐字字符串文字@"(?s)\blabel\b(?:(?!\blabel\b).)*"
  • 宾果维克托!工作一种享受。我添加了using System.Linq; 并使用了“您的模式的逐字版本:string pattern = @"(?s)\blabel\b(?:(?!\blabel\b).)*";”和主数组:string[] BookData = Regex.Matches(input, pattern).Cast<Match>().Select(p => p.Value).ToArray(); 如果您将答案放在一起,我可以接受。欢呼

标签: arrays regex string unity3d split


【解决方案1】:

添加{using System.Linq;} 后,使用以下正则表达式和Regex.Matches

@"(?s)\blabel\b(?:(?!\blabel\b).)*"

regex demo

您的代码将如下所示:

string[] BookData = Regex.Matches(input, pattern).Cast<Match>().Select(p => p.Value).ToArray();

正则表达式匹配:

  • (?s) - 当. 匹配换行符时启用单行模式
  • \blabel\b - 匹配整个单词 label
  • (?:(?!\blabel\b).)* - 匹配不是整个单词的label 字符序列的起始字符的任何字符。

如果您不需要检查整个单词,请删除\bs。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多