正则表达式匹配包含至少3个破折号/连字符的字符串

时间:2016-08-10 15:28:29

标签: c# regex

我有一个电子邮件正文。它包含几行文字。我需要提取第一次出现的字符串:

  1. 来自特定文字
  2. 包含至少3个破折号
  3. 虚线的形状未知。它可能包含任何数字的字母和数字,即: AA3A-123-NNN-D或12-OOO-12455-AS

    例如:

    Lorem ipsum dolor坐下来,精神上的精神。 Donec imperdiet porta libero ac imperdiet。

    Nam enim nisl:aliquam ut feugiat vitae

    我需要搜索的具体文字: Etiam rhoncus AAFA-12X-DDDD-12 metus risus 更多文字:foo

    目标语言是C#。

    我尝试过像char (*names)[8]; names = malloc(10*sizeof(*names)); 这样的事情,但正如你在这里看到的,我需要设置一个并不总是已知的字符串的形状。

3 个答案:

答案 0 :(得分:4)

您可以使用[\s\S]的惰性量词:

(?:Specific\ text\ after\ which\ I\ need\ to\ search:)
[\s\S]+?\K
(\b\w+-\w+-\w+-\w+\b)

\b是一个单词边界,\K删除匹配项左侧的所有内容。
请参阅a demo on regex101.com

答案 1 :(得分:0)

如果您的表达式包含未知数量的字母和数字,您可以做的最好的事情是指定正则表达式的范围。我在你的例子中看到,一个块最多有5个字符,最少一个有1个字符。

所以像这样的东西会抓住它,

([A-Za-z0-9]{1,5}-[A-Za-z0-9]{1,5}-[A-Za-z0-9]{1,5}-[A-Za-z0-9]{1,5})

答案 2 :(得分:0)

我会选择像(?:[a-zA-Z0-9]+-){3,}[a-zA-Z0-9]+这样的东西。这将做的是匹配3个或更多以字母结尾的字母数字组,然后是不支持的字母数字组。

Try it yourself on Regex101