我有一个电子邮件正文。它包含几行文字。我需要提取第一次出现的字符串:
虚线的形状未知。它可能包含任何数字的字母和数字,即: 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));
这样的事情,但正如你在这里看到的,我需要设置一个并不总是已知的字符串的形状。
答案 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个或更多以字母结尾的字母数字组,然后是不支持的字母数字组。