正则表达式换行符选择

Regex newline selecting

我的代码: 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] = 这里还有一些文字

您可以使用以下基于正向预测的正则表达式。

@"(?s)(?:^|\n)([A-Za-z0-9]{5})=(.*?)(?=\n[A-Za-z0-9]{5}=|$)"

DEMO

  • 如果在正则表达式中使用 DOTALL 修饰符 (?s)^ 仅匹配第一行的开头。

  • 所以这个(?:^|\n)匹配第一行的开头或换行符,

  • 存在于 ([A-Za-z0-9]{5})= 5 个字母数字字符和一个 = 符号之前。这会捕获字母数字字符。

  • 现在 (.*?) 将对零个或多个字符进行非贪婪匹配,直到

    1. \n[A-Za-z0-9]{5}= 换行符后跟 5 个字母数字字符加上一个 = 符号。或

    2. $ 行到达。这里 $ 仅匹配最后一行的结尾,因为我们使用了 DOTALL 修饰符。