为啥我没有得到正则表达式组值
Posted
技术标签:
【中文标题】为啥我没有得到正则表达式组值【英文标题】:Why am I not getting Regex group values为什么我没有得到正则表达式组值 【发布时间】:2021-11-23 23:40:30 【问题描述】:从这个帖子回答得到了一些很大的帮助here
现在我正在尝试在我的多行字符串中捕获几个模式,但无法正常工作。有什么提示吗?
这是一个 .net fiddle 我正在玩
desired result:
//these can be letters
1: 3333
2: 1111
代码:
using System;
using System.Text.RegularExpressions;
public class Program
public static void Main()
var item = " john smith (ABCDEFG) <js@email.com>\n" +
"target1 = 3333, j\n" +
"target2 1111, ";
String[] patternArr = "(?:\\s*)",
"(?<target1>target1 = (\\w+)])", // capture the first target
"(?:\\s*)",
"(?<target2>target2 (\\w+))", // captures the second target
;
var pattern = String.Join("", patternArr);
var m = Regex.Match(item, pattern);
if (m.Success)
Console.WriteLine("target1: 0", m.Groups["target1"]);
Console.WriteLine("target2: 0", m.Groups["target2"]);
【问题讨论】:
注意\t
在"(?<target2>\target2 (\\w+))"
是一个TAB,我想你想要t
。主要问题是您的正则表达式与那样的字符串不匹配。图案要求是什么?试试var pattern = @"target1 = (?<target1>.+)\ntarget2(?<target2>.+)";
,或许能解决问题。
好的,刚刚更新了 OP。我只需要 4 个字母数字字符
【参考方案1】:
你可以使用
var pattern = @"target1 = (?<target1>\w+).*\ntarget2\s+(?<target2>\w+)";
请参阅regex demo。 正则表达式详细信息:
target1 =
- 文字字符串
(?<target1>\w+)
- 组“target1”:一个或多个单词字符
.*
- 该行的其余部分
\n
- 换行符
target2
- 文字字符串
\s+
- 一个或多个空格
(?<target2>\w+)
- 组“target2”:一个或多个单词字符
见C# demo:
using System;
using System.Text.RegularExpressions;
public class Program
public static void Main()
var item = " john smith (ABCDEFG) <js@email.com>\n" +
"target1 = 3333, j\n" +
"target2 1111, ";
var pattern = @"target1 = (?<target1>\w+).*\ntarget2\s+(?<target2>\w+)";
var m = Regex.Match(item, pattern);
if (m.Success)
Console.WriteLine("target1: 0", m.Groups["target1"]);
Console.WriteLine("target2: 0", m.Groups["target2"]);
输出:
target1: 3333
target2: 1111
【讨论】:
还需要RegexOptions.Singeline
并删除\n
,这样它的行数可能会多于两行
@Charlieface 如果是,我会提到。这些行在原始输入中是连续的。
我注意到如果我在项目值中交换目标,则不会发生匹配。你能帮我理解订单的重要性吗?如果我不知道哪个先出现怎么办? dotnetfiddle.net/7RGV6a
@Rod 当然,给它纯文本:regex101.com/r/qIyYCV/2
@Rod 您在 regex101.com 上使用字符串文字,而您应该使用 纯文本。请熟悉this post。以上是关于为啥我没有得到正则表达式组值的主要内容,如果未能解决你的问题,请参考以下文章
Qt正则表达式 如何得到字符串中所有满足条件的字符。这个正则为啥匹配不成功
为啥这个正则表达式只在 Python 中的行首匹配? [复制]