正则表达式模式问题 c#

本文关键字:问题 模式 正则表达式 | 更新日期: 2023-09-27 18:31:41

我这里有点麻烦。我正在尝试找到一个与所有休耕示例匹配的正则表达式:

  • 方法("团队详细信息")

    应返回:团队详细信息

  • 方法( @"团队详细信息项

    等等

    和更多" )

    应该返回:团队详细信息项以及越来越多的

  • 方法( "团队 ''"详细信息''" )

    应返回:团队"详细信息"

  • 方法( @"团队 "细节"" )

    应返回:团队"详细信息"

  • 方法( @"团队

    "

    "详情")

    应返回:团队

    "详情"

我设法创建了一个正则表达式模式:

Method'(.*'"(.*)'".*')
它在第一个示例中有效,

部分在第二个示例中有效,但我发现很难为所有 5 个示例创建一个模式。有什么帮助吗?

干杯

正则表达式模式问题 c#

默认情况下

.只匹配非换行符,因此如果匹配跨越多行,您的正则表达式将失败。如果使用(?s)模式修饰符更改该行为,则需要确保匹配项不会变得太长。

实现此目的的最简单方法是使*量词变得懒惰。

(?s)Method'(.*?'"(.*?)'".*?')

这将适用于您的示例,但如果"Details..."字符串中有任何右括号,它将失败。

您可以通过限制允许的字符集来使其更健壮,考虑转义或双引号:

Method'([^'"]*'"((?:""|''.|[^'"'']+)*)'"[^'"]*')

在 regex101.com 上实时测试。

不能做的是更改匹配的内容(即,删除额外的空格或转换引号,正如您所期望的那样) - 这无法在单个正则表达式中完成。但是,您可以将更多转换步骤应用于此正则表达式的匹配项,并进一步处理这些步骤。

使用如下表达式:Method'('s*@?(.+?)')(此处为示例)。您需要包含s标志。这将允许句点字符也匹配新行,这是第二个示例所需的内容。

一旦你有了你想要的字符串(包含在正则表达式组中),你就可以使用通常的替换操作来格式化文本。这应该产生一个更灵活、更易于遵循的解决方案。