【问题标题】:Regex custom start & end with quotes .Net [duplicate]正则表达式自定义以引号开头和结尾.Net [重复]
【发布时间】:2023-03-05 03:59:01
【问题描述】:

我正在尝试几个正则表达式来尝试从文件中提取 txt。

我尝试with this example 没有成功

假设我有这个字符串:

This is _localizer["my test 1."]' (here I want 'my test 1.')

This is _localizer["my test 2."] And this is _localizer["my test 3."]' (here I want 'my test 2.' and 'my test 3.')

在其他情况下,正则表达式需要了解开始锚点 (_localizer[") 和结束锚点 ("]),并且需要知道有时同一行中有多个“本地化器”。

在我想要提取的 txt 中,有时会有 / 或 \ 和其他可能导致正则表达式失败的字符。

我想做什么:

Regex r = new Regex(@"_localizer[(.+?)]");
                var matches = r.Matches(txt)
                                .Select(xx=> xx.Value)
                                .Distinct();

干杯

【问题讨论】:

  • 您需要像_localizer\[(.+?)\] 一样转义[]。要对其进行测试,请访问regex101
  • @Ackdari 工作正常,但是当同一行中有 2 个本地化程序时,此正则表达式仅捕获第一个
  • 那不是真的检查this out。它完美地工作
  • @Ackdari 你是对的,我的错......让你回答一个问题,所以我接受。谢谢!

标签: c# .net regex


【解决方案1】:

您的正则表达式字符串应如下所示:

new Regex(@"(?:_localizer\[""(.+?)""\])");

让我们分解一下。

首先是(?: - 这告诉我们需要在括号内进行匹配,但我们不希望输出中的数据

然后_localizer\["" - 这只是文字匹配

下一个 (.+?) - . 匹配任何字符,+ 告诉我们我们想要一个或多个,? 使 + 变得懒惰,这意味着它只会匹配最少数量的字符它可以。通过用() 包围此声明,我们表示此数据是我们想要的

最后是""\]) - 用于右括号和右括号的文字。

还要将该数据放入一个简单的列表中,您需要将 LINQ 更改为:

var matches = r.Matches(txt)
               .Select(xx=> xx.Groups[1].Value)
               .Distinct();

【讨论】:

  • 工作正常...但是当同一行中有 2 个本地化程序时,此正则表达式仅捕获第一个。并将 txt 和锚点一起返回
  • 您是否对 Select 语句进行了更改? c# 正则表达式引擎很奇怪,它返回第一组中的所有内容,所以Groups[1] 有你想要的数据。至于每行的多个匹配项,我需要查看更多您的代码,因为我编写的测试程序对此没有任何问题
  • 它工作正常......但是当结束锚在另一行时,它不起作用......就像只有 ] 将在另一行......将正则表达式选项更改为 SingleLine但没有工作
  • dotnetfiddle.net/oyDea6 你试过了吗?
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2017-09-17
  • 2013-08-04
  • 2018-02-21
相关资源
最近更新 更多