我有一个重复使用的正则表达式,其中stringLiteral从一次调用到下一次调用会有所不同。
一个人:
.*(^stringLiteral Number 1\r?\n)([\w|\s][^\r\n]+)(.+)
而下一个是:
.*(^stringLiteral Number 2\r?\n)([\w|\s][^\r\n]+)(.+)
这里有优化的机会吗?
编辑:要更加明确我正在使用的实时数据 - 我正在解析一个包含名称/值对的电子邮件。我知道名称(标签),我知道我之后的值是标签后面的行。但我不能确定名称/值对(行)将始终以相同的顺序 - 所以我不能构建一个大的表达式。
我必须构建多个表达式,从块的开头到包括给定标签(这将是stringLiteral)的所有内容都丢弃;将下一行捕获到捕获组中;然后丢弃该行之后的所有内容。
所以此行捕获名称字段
myOrder.Name = Regex.Replace(resultString, @".*(^Name\r\n)([\w|\s][^\r\n]+)(.+)", "$2", RegexOptions.Multiline | RegexOptions.Singleline);
此行捕获价格字段
myOrder.Price= Regex.Replace(resultString, @".*(^Price\r\n)([\w|\s][^\r\n]+)(.+)", "$2", RegexOptions.Multiline | RegexOptions.Singleline);
答案 0 :(得分:2)
好吧,如果你想要,你可以将它们压缩成一个表达式:
.(^stringLiteral Number [12]\r?\n)([\w|\s][^\r\n]+)(.+)
如果您发布了想要匹配或捕获的输入示例,我可能会提供更多帮助。
答案 1 :(得分:0)
您可以按照Andrew的建议将它们压缩成单个表达式。
您还应该禁用不需要的回溯,例如:(?:subregexp)而不是(subregexp)。这样做可以节省内存。