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

C# 正则表达式以匹配至少包含3个破折号/连字符的字符串,c#,regex,C#,Regex,我有一封电子邮件。它包含几行文本。我需要提取以下字符串的第一个匹配项: 在特定文本之后 至少包含3个破折号 虚线字符串的形状未知。它可以包含任意数字的字母和数字,即: AA3A-123-NNN-D或12-OOO-12455-AS 例如: Lorem ipsum dolor sit amet,是一位杰出的献身者。Donec imperdiet porta libero ac imperdiet Nam enim nisl:aliquam ut feugiat vitae 我需要搜索的特定文本:Et

我有一封电子邮件。它包含几行文本。我需要提取以下字符串的第一个匹配项:

  • 在特定文本之后
  • 至少包含3个破折号
  • 虚线字符串的形状未知。它可以包含任意数字的字母和数字,即: AA3A-123-NNN-D或12-OOO-12455-AS

    例如:

    Lorem ipsum dolor sit amet,是一位杰出的献身者。Donec imperdiet porta libero ac imperdiet

    Nam enim nisl:aliquam ut feugiat vitae

    我需要搜索的特定文本:Etiam rhoncusAAFA-12X-DDDD-12metus risus 更多文字:foo

    目标语言是C#


    我尝试过做一些类似于
    ([A-Za-z0-9]{5}-[A-Za-z0-9]{4}-[A-Za-z0-9]{3}-[A-Za-z0-9]{5})的事情,但正如您在这里看到的,我需要设置字符串的形状,这并不总是已知的。

    如果您的表达式包含未知数量的字母和数字,那么您最好为正则表达式指定一个范围。我在你们的例子中看到,一个块最多有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})
    

    您可以将惰性量词与
    [\s\s]
    一起使用:

    (?:Specific\ text\ after\ which\ I\ need\ to\ search:)
    [\s\S]+?\K
    (\b\w+-\w+-\w+-\w+\b)
    
    \b
    是单词边界,
    \K
    删除匹配左侧的所有内容。

    参见。

    我会选择类似于
    (?:[a-zA-Z0-9]+-){3,}[a-zA-Z0-9]+
    。这将匹配3组或更多以破折号结尾的字母数字,然后是一组不以破折号结尾的字母数字


    .

    如果它们在正则表达式中每个块(每个破折号之前)包含一系列可能的字符,您可以将{5}更改为{1,5}1到5,您可以使用
    (?s)
    也可以代替
    [\s\s]
    ,非常感谢,这很好。如果字符串只有3个破折号,则它可以工作,但如果有更多破折号,例如:AA-B12-C333-D,则它与第3个破折号之后的零件不匹配dash@Ashton在最后添加
    \S*
    ,就像
    \b\w+-\w+-\w+-\w+\b\S*
    太棒了!作品我今天学到了一些东西。(我现在还不喜欢regex,但我会买一杯喝的)。非常感谢。谢谢你,塞巴斯蒂安,我认为这也朝着正确的方向发展,但是简和罗克的建议更接近。谢谢你的帮助!谢谢Fivestar。简的解决方案更接近我的需要。我感谢你的帮助!:)@阿什顿,没问题!这个答案好多了我的是一个相当懒惰的正则表达式我刚刚编辑了你的哈哈。祝你好运前进!