正则表达式模式问题 c#
本文关键字:问题 模式 正则表达式 | 更新日期: 2023-09-27 18:31:41
我这里有点麻烦。我正在尝试找到一个与所有休耕示例匹配的正则表达式:
-
方法("团队详细信息")
应返回:团队详细信息
-
方法( @"团队详细信息项
等等
和更多" )
应该返回:团队详细信息项以及越来越多的
-
方法( "团队 ''"详细信息''" )
应返回:团队"详细信息"
-
方法( @"团队 "细节"" )
应返回:团队"详细信息"
-
方法( @"团队
""详情")
应返回:团队
"详情"
我设法创建了一个正则表达式模式:
Method'(.*'"(.*)'".*')
它在第一个示例中有效,部分在第二个示例中有效,但我发现很难为所有 5 个示例创建一个模式。有什么帮助吗?
干杯
默认情况下
.
只匹配非换行符,因此如果匹配跨越多行,您的正则表达式将失败。如果使用(?s)
模式修饰符更改该行为,则需要确保匹配项不会变得太长。
实现此目的的最简单方法是使*
量词变得懒惰。
(?s)Method'(.*?'"(.*?)'".*?')
这将适用于您的示例,但如果"Details..."
字符串中有任何右括号,它将失败。
您可以通过限制允许的字符集来使其更健壮,考虑转义或双引号:
Method'([^'"]*'"((?:""|''.|[^'"'']+)*)'"[^'"]*')
在 regex101.com 上实时测试。
这不能做的是更改匹配的内容(即,删除额外的空格或转换引号,正如您所期望的那样) - 这无法在单个正则表达式中完成。但是,您可以将更多转换步骤应用于此正则表达式的匹配项,并进一步处理这些步骤。
使用如下表达式:Method'('s*@?(.+?)')
(此处为示例)。您需要包含s
标志。这将允许句点字符也匹配新行,这是第二个示例所需的内容。
一旦你有了你想要的字符串(包含在正则表达式组中),你就可以使用通常的替换操作来格式化文本。这应该产生一个更灵活、更易于遵循的解决方案。