【问题标题】:Regex to find a character is present n number of times [duplicate]查找字符的正则表达式存在n次[重复]
【发布时间】:2019-09-03 21:55:17
【问题描述】:

假设我有以下测试数据

Home$Fruits
Home$Fruits$Apple
Home$Fruits$Apple$Red-Apple
Home$Fruits$Apple$Green-Apple
Home$Fruits$Banana$Yellow-Banana
Home$Fruits$Banana$Green-Banana
Home$Fruits$Orange

我想匹配那些有 $ 符号的行正好 2 次(或正好 'n' 次)。可能的正则表达式是什么?

非常感谢任何帮助。

【问题讨论】:

  • 金额是否需要完全等于 'n',或者至少有那么多 '$'?
  • 使用正则表达式,您将很难避免对具有超过指定数量要匹配的符号的行进行错误匹配。使用其他字符串处理技术应该会容易得多。例如,在 javascript 中,此函数将根据文本和美元符号的数量返回匹配行的列表:(text, dollars)=> text.split('\n').filter(line => [...line].filter(character => character === "$").length === dollars)
  • 正好两个或两个或更多,区别仅在于限制量词,方法是the same
  • @Aswath 您似乎不确定您的要求,因为您不断更改它。

标签: regex


【解决方案1】:

您可以使用以下模式:

^(?:[^$\r\n]*\$[^$\r\n]*){2}$

Demo.

您可以将{2} 替换为{n},其中n 是“$”符号的出现次数。您还可以使用{n,} 匹配n 或更多次。

Demo for two or more times.

【讨论】:

    【解决方案2】:

    尝试匹配以下模式:

    ^.*\$.*\$.*$
    

    这匹配(至少)两个$,在给定行的任意位置。

    Demo

    只有当全点模式启用时,此模式才会按预期工作。否则,.* 可能会跟踪不止一行。

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多