我的代码:
Regex("([A-Za-z0-9]{5})=([^\n]+)", RegexOptions.Compiled);
示例文字:
ab94c=some text here
a6u4c=sample text here
sample text continues. it contains a newline character.
gh94c=some more text here
这就是我得到的:https://regex101.com/r/cN6gJ5/1
这就是我想要的:
每个文字都有一个id。我想捕获id和每个角色直到下一个id。我想创建一个这样的数组:
array [ab94c] =这里的一些文字
数组[a6u4c] =示例文本
示例文本继续。它包含一个换行符。
array [gh94c] =这里有更多文字
答案 0 :(得分:2)
您可以使用以下正向前瞻性正则表达式。
@"(?s)(?:^|\n)([A-Za-z0-9]{5})=(.*?)(?=\n[A-Za-z0-9]{5}=|$)"
如果在正则表达式中使用DOTALL修饰符(?s)
,则^
仅匹配第一行的开头。
所以这个(?:^|\n)
匹配第一行或新行字符的开头,
存在于([A-Za-z0-9]{5})=
5个字母数字字符和=
符号之前。这就抓住了那个alphanum chars。
现在(.*?)
将进行零或多个字符的非贪婪匹配,直到
\n[A-Za-z0-9]{5}=
新行后跟5个alphanum字符加上=
符号。 OR
$
行。此处$
仅匹配最后一行的结尾,因为我们使用的是DOTALL修饰符。