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

本文关键字:3个 连字符 字符串 包含 正则表达式 | 更新日期: 2023-09-27 18:01:39

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

  1. 出现在特定文本
  2. 之后
  3. 包含至少3个破折号

虚线字符串的形状未知。它可以包含任意数字的字母和数字,即:AA3A-123-NNN-D或12-OOO-12455-AS

例如:

Lorem ipsum dolor sit met, consecent adiping elite。不节食是一种自由运动。

namenim nisl: aliquam ut fegigivitae

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

目标语言是c#

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

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

您可以对['s'S]使用延迟量词:

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

'b是一个词边界,'K从匹配中删除左边的所有内容。
看到演示regex101.com

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

我会选择(?:[a-zA-Z0-9]+-){3,}[a-zA-Z0-9]+之类的东西。这将匹配3组或更多以破折号结尾的字母数字,后面跟着一个不以破折号结尾的字母数字。