【问题标题】:Regex to capture repeating pattern of variable length正则表达式捕获可变长度的重复模式
【发布时间】:2018-04-24 06:22:03
【问题描述】:

我正在尝试准备控制台参数的重复模式 通过 CommandLineParser (nuget) 运行。我已经完成了一半,但我无法将secondmatch 作为个人比赛。

基本上我想做的是一个可链接的调用列表。

每次调用都应该以-t开头

我当前的正则表达式

(((?=-t ).+(?=-t ))|((?=-t ).+))

输入字符串:

-t fistarg -tfalsepositive -a wasdf- -t secondmatch -t thirdmatch

当前匹配:

-t fistarg -tfalsepositive -a wasdf- -t secondmatch

-t thirdmatch

预期匹配:

-t fistarg -tfalsepositive -a wasdf-

-t secondmatch

-t thirdmatch

【问题讨论】:

  • 可能是(?=-t ).+?(?=-t |$)?
  • @WiktorStribiżew 是的 - 让它成为答案 :)
  • @WiktorStribiżew 我一直认为 .+ 等同于 .*?您愿意告诉我将它与 + 一起使用有什么区别吗?
  • 好吧,如果应该至少有一个字符,请使用+?。否则,请使用*?

标签: c# regex regex-lookarounds


【解决方案1】:

你可以使用

-t .+?(?=-t |$)

regex demo

详情

  • -t - -t 子字符串
  • .+? - 一个空格,后跟任何 1+ 个字符(使用 *? 匹配 0+ 个字符),而不是换行符,尽可能少
  • (?=-t |$) - 正向前瞻,确保在当前位置的右侧有一个 -t 子字符串或字符串结尾。

【讨论】:

  • 纯粹好奇,你有什么理由使用 RegexStorm 而不是传统的 Regex101 吗?
  • @Paul-Etienne 这是一个C#相关的问题,regex101不支持.NET。尽管此模式在 PCRE、JS 和 Python 中的工作方式非常相似,但 RegexStorm 是一个更好的证明,该模式将适用于 .NET 正则表达式引擎。
  • 如果 -t xxxx-t xxxx 应该是一个匹配项,那么正则表达式就会失败。
  • 各位,如果-t必须匹配为“全词”,在-t@"\B-t .+?(?=-t |$)"前加\B即可。
  • \B 将修复正则表达式,但在两个地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多