【问题标题】:Get only the Nth occurence of a string using .net Regex only仅使用 .net Regex 仅获取第 N 次出现的字符串
【发布时间】:2020-05-13 17:24:25
【问题描述】:

请帮忙。我已经尝试了超过 2 天......这让我很沮丧。

如果你有任何想法会很有帮助:

具有以下文本并在 .NET 中使用正则表达式:

   -------------------------------------
   This is a text   : This is my first line of information
                      which continues here
                    : This is my second line of information
                      which continues here
                    : This is my third line of information
                      which continues here
   -------------------------------------

我怎么能得到:
- “这是我的第一条信息,在此继续”
- “这是我的第二条信息,在此继续”
- “这是我的第三条信息,在此继续”

一个实际的例子:Trying to read line by line
请考虑文本动态。

我能够获得的最佳正则表达式是:

 (?ms)((?<=(:)).*?(?=(\:)))
  1. 如何从“:这是我的第二行”或“:这是我的第三行”开始阅读
  2. 如何替换“This is my first line of information”和“which continue here”之间的空格。

非常感谢。 拉杜。

【问题讨论】:

  • 试试(?&lt;=:)[^:]+,见demo
  • 阅读全部,用冒号分割,删除第一个项目,然后为每个项目将多个空格替换为单个空格并修剪
  • @WiktorStribiżew:没关系,但我如何从第二行开始?我没有使用代码的奢侈。仅正则表达式 :(
  • 什么意思?您想拥有 3 种不同的正则表达式模式吗? 如何替换空格 - 仅使用正则表达式替换功能/方法,无法在一次匹配操作中匹配不连续的文本片段 - 没有正则表达式允许您.

标签: c# .net regex


【解决方案1】:

这将为您提供所需的一切,但不幸的是也有点太多了

https://regex101.com/r/5lcWku/1

/:[^:]+$/gm

问题是,如果不匹配最后一行之后的所有内容,您将永远无法匹配最后一行,因为您无法知道最后一行之后的内容是否仍然有效(或者至少您没有'不要在我们最初的问题中提供)。

【讨论】:

  • @FP:谢谢,但我怎样才能从第二个“:”开始?
  • 这在正则表达式中有点难以做到,而不使其完全不可读。我建议遍历捕获的组并跳过第一个。
猜你喜欢
  • 2010-09-16
  • 2013-01-06
  • 1970-01-01
  • 2014-11-18
  • 2011-08-25
  • 1970-01-01
相关资源
最近更新 更多