正则表达式换行选择

时间:2015-05-03 15:16:48

标签: c# regex negative-lookahead

我的代码: 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

这就是我想要的:what I want

每个文字都有一个id。我想捕获id和每个角色直到下一个id。我想创建一个这样的数组:

array [ab94c] =这里的一些文字

数组[a6u4c] =示例文本

示例文本继续。它包含一个换行符。

array [gh94c] =这里有更多文字

1 个答案:

答案 0 :(得分:2)

您可以使用以下正向前瞻性正则表达式。

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

DEMO

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

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

  • 存在于([A-Za-z0-9]{5})= 5个字母数字字符和=符号之前。这就抓住了那个alphanum chars。

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

    1. \n[A-Za-z0-9]{5}=新行后跟5个alphanum字符加上=符号。 OR

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