C# 正则表达式匹配短语并创建捕获组

C# 正则表达式匹配短语并创建捕获组,c#,regex,C#,Regex,我正在尝试创建一个正则表达式和C#模式,它将匹配以下短语: Photos of Washington DC taken by Jane Doe 其中,捕获组生成“照片”、“华盛顿特区”和“无名氏”。其他可能性是: 鲁比拍摄的奥斯汀视频:视频,奥斯汀,鲁比 Willa Shepherd拍摄的红芽狗照片:照片,红芽狗,Willa Shepherd 这在正则表达式中是可能的吗 看来我被标记了…我有没有提到我不知道正则表达式? 我试过:(的照片)。*?((?:[a-z][a-z]+)(拍摄者)((?:

我正在尝试创建一个正则表达式和C#模式,它将匹配以下短语:

Photos of Washington DC taken by Jane Doe
其中,捕获组生成“照片”、“华盛顿特区”和“无名氏”。其他可能性是:

鲁比拍摄的奥斯汀视频
:视频,奥斯汀,鲁比

Willa Shepherd拍摄的红芽狗照片:照片,红芽狗,Willa Shepherd

这在正则表达式中是可能的吗

看来我被标记了…我有没有提到我不知道正则表达式?
我试过:
(的照片)。*?((?:[a-z][a-z]+)(拍摄者)((?:[a-z][a-z]+)
,但失败了。

*
匹配任何字符串(新行除外)。通过向其添加一个
*?
),您可以告诉正则表达式引擎匹配尽可能少的字符,这可能是正确的方法,因此
的第一个实例将被用作预期子匹配的分隔符:

matchResults = Regex.Match(subjectString, "^(.*?) of (.*?) taken by (.*)");
// matchResults.Groups[1].Value contains "Photos" etc.

如果您不希望输入中有多个
执行,您可以将所有
*?
更改为
*
*
匹配任何字符串(新行除外)。通过向其添加一个
*?
),您可以告诉正则表达式引擎匹配尽可能少的字符,这可能是正确的方法,因此
的第一个实例将被用作预期子匹配的分隔符:

matchResults = Regex.Match(subjectString, "^(.*?) of (.*?) taken by (.*)");
// matchResults.Groups[1].Value contains "Photos" etc.

如果您不希望输入中有多个
执行,您可以将所有
*?
更改为
*

当然可以!尝试查找
.Matches
方法。是的,这是可能的。我通常在构建更复杂的表达式时使用这个网站:谢谢Leon,尽管我不懂这个工具。我试图在下面粘贴Tim的结果,但这些匹配没有意义。当然是!尝试查找
.Matches
方法。是的,这是可能的。我通常在构建更复杂的表达式时使用这个网站:谢谢Leon,尽管我不懂这个工具。我试着在下面粘贴Tim的结果,但是匹配没有意义……你的回答是居高临下的,但它起作用了,谢谢。@MatthewMcDermott:很抱歉-你最初的问题没有显示你的问题所在,它有点像“我不想读基础知识,请给我写一些代码”-这导致了我直截了当的回答。你编辑的问题好多了,我会尝试相应地改进我的答案。亲爱的,谢谢,我已经做了好几天了,正则表达式对我来说是一个真正的谜。即使应用了你的解决方案,我也不能真正理解它。然后测试就更难了……而且你的答案是屈尊俯就的,但它是有效的,谢谢。@MatthewMcDermott:很抱歉,你最初的问题没有显示你的问题在哪里,它有点像“我不想读基础知识,请为我写一些代码”——这导致了我相当直截了当的答案。你编辑的问题好多了,我会尝试相应地改进我的答案。亲爱的,谢谢,我已经做了好几天了,正则表达式对我来说是一个真正的谜。即使应用了你的解决方案,我也不能真正理解它。然后测试它就更难了。