【问题标题】:Regular expression: between brackets, starts with a specific string but do not ignore spaces正则表达式:括号之间,以特定字符串开头,但不忽略空格
【发布时间】:2017-09-28 02:38:40
【问题描述】:

我正在尝试从字符串中提取特定模式的所有唯一出现。我的字符串是
text = 'My name is {{user_name}} {{user_second name}}. I am {{anything_else}}'
我想提取以“user_”开头的双括号内的文本。对于给定的字符串,我想要以下数组
["user_name", "user_second name"].
我正在尝试使用以下正则表达式来实现这一点,但如果方括号内有空格,它会以某种方式忽略它。
text.scan(/\{{(customer_\w*)\}}/).uniq.flatten 返回["user_name"]

任何帮助将不胜感激。

【问题讨论】:

  • 试试/{{(user_[^}]*)}}//{{(user_.*?)}}/
  • 它有效!!!!非常感谢。您应该将其发布为答案以接受它。

标签: ruby regex


【解决方案1】:

\w* 仅匹配 0 个或多个单词字符,不匹配空格。

似乎这种场景的最佳模式是惰性点模式:

/{{(user_.*?)}}/
         ^^^

查看Rubular demoonline Ruby demo

这里的.*? 将匹配除换行符之外的任何 0+ 字符,尽可能少,直到第一个 }}

如果用户名不能有},您也可以使用/{{(user_[^}]*)}}/ 正则表达式。 [^}]* 否定字符类匹配除 } 字符之外的 0 个或多个字符。与基于 .*? 的解决方案还有另一个区别:[^}] 也匹配换行符。要使 . 匹配换行符,请添加带有第一个正则表达式 /{{(user_.*?)}}/m/m 修饰符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多