gpt4 book ai didi

C# 正则表达式数组的子表达式?

转载 作者:太空狗 更新时间:2023-10-30 01:06:47 24 4
gpt4 key购买 nike

令我惊讶的是,我无法找到一个答案或示例来说明使用正则表达式解析文本应该是一个相当普遍的问题。我正在使用 native C# 正则表达式;不是第三方组件。

是嵌套列表的问题;例如,假设我有一个具有已定义格式的文本文件,但我想在一个类中构建它(下面的假设示例):

Input Text
Name: Joe Smith
Occupation: Software Developer
Patent(s) Awarded: 3 award(s)
Light Bulb
Rollercoasters
NTFS

Desired Output 是一个具有以下内容的匹配项::

MatchCollection.Groups["Name"].Value
MatchCollection.Groups["Occupation"].Value
MatchCollection.Groups["AwardCount"].Value

... and then some form of list for the individual patents...
e.g. MatchCollection.Groups["Award"][0].Value
e.g. MatchCollection.Groups["Award"][1].Value
e.g. MatchCollection.Groups["Award"][2].Value
... and so on ...

现在所做的是第一步获取所有非列表信息并将专利列表视为单个字符串;例如:

Name:\s+(?<Name>.+)\nOccupation:\s+(?<Occupation>.+)\nPatent\(s\) Awarded:\s+(?<AwardCount>\d+).*\n(?<AwardInfo>(?:.*\r\n)*)

...然后对专利列表进行二次传递以创建专利字符串的可枚举列表。如果有下面的构造告诉正则表达式你希望这个子表达式项在它出现时被拾取,那就太好了:

(?<AwardInfo>(?:.*\r\n)*)*
^
Which would return a second list to the Match object.

我是否忽略了一些简单的东西来获得让我能够迭代各个专利的输出?如果没有,是否有人仅使用一个正则表达式创造性地解决了这个问题?

最佳答案

如果您设置正则表达式使得 <AwardInfo>分别匹配每一行 - 通过移动 *组外(并修剪空格,并使换行符可选):

(?:\s*(?<AwardInfo>.*(?:\r\n)?))*

然后你可以使用 Captures 该组的属性以获取该组匹配的每个不同值。例如,

MatchCollection[0].Groups["AwardInfo"].Captures[0] is "Light Bulb"
MatchCollection[0].Groups["AwardInfo"].Captures[1] is "Rollercoasters"
MatchCollection[0].Groups["AwardInfo"].Captures[2] is "NTFS"

关于C# 正则表达式数组的子表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com