匹配字符串数字与Ruby正则表达式

时间:2015-11-20 14:14:20

标签: ruby regex puppet

我需要帮助来匹配字符串与ruby正则表达式。 (这是傀儡)

  1. 如何匹配数字的所有内容:001到010,最后。
  2. 示例:master001,master002,master003

    1. 然后我需要匹配以:011到999开头的所有内容。
    2. 示例:master011,master012 ..... master997,master998,master999

4 个答案:

答案 0 :(得分:3)

  

如何匹配数字的所有内容:001到010,最后。

\w+0(?:0[1-9]|10)
  

然后我需要匹配以:011到999开头的所有内容。

\w+(?:0[1-9]|[1-9]\d)\d

直播herehere 正如@Cary所建议的那样,您可以使用str.scan

运行它

答案 1 :(得分:0)

我的第一次尝试将是那些2:

"master001".match(/010$|00[1-9]$/) #=> "001"  up to "009" "010"
"master099".match(/0[1-9]\d$|[1-9]\d\d$/) #=> "011" up to "999"

修改:我的第二次尝试是那些:

"master001".match(/010$|00[1-9]$/) #=> "001"  up to "009" "010"
"master099".match(/0[1-9]\d$|[1-9]\d\d$/) #=> "010" up to "999"

第二个正则表达式捕获了010,但是如果你已经在第一个正确的时候就可以了。

无论如何,对@Cyrbil赞不绝口。

答案 2 :(得分:0)

"一切"在"我怎样才能匹配所有......"。很模糊可以"一切"包含任何字符,包括空格?怎么样" cat_1001",它完全由单词字符(caluclate_matrix)组成?该字符串以数字" 1001"的字符串表示结尾。但是他的最后三个角色是" 001"?它应该匹配吗?你想匹配字符串" 007" (之前没有任何内容的三位数字)?我假设你想要匹配字符串:

  • 从字符串的开头开始,或者以非字母开头
  • 还有一个字母(大写或小写)
  • 有三位数字
  • 位于字符串的末尾或后跟非数字

假设字符串是:

"cat_1001" =~ /\w+/ #=> 0

应用我所采用的匹配规则,第一组(1-10)由Ann和Bob组成;第二组(11-999),Bee和Hank。

这可以通过以下正则表达式完成:

str = "Ann010, Bee012, Bob001 and Hank999a are MI6; 007, Deb0001 and Paul000 aren't"

提取候选人:

r = /
     [a-z]+ # match one or more letters
     \d{3}  # match three digits
     # (?!\d) # do not match another digit (negative lookahead)
    /ix     # case-indifferent and extended/free-spacing modes

然后可以根据需要提取:

arr = str.scan(r)
  #=> ["Ann010", "Bee012", "Bob001", "Hank999", "Deb000", "Paul000"] 

答案 3 :(得分:0)

Cyrbil的回答看起来不错,但它是一个思想家,它忽视了一些东西。你可以用一些丑陋的东西安全地玩它:

/\w+(?:#{('001'..'010').to_a.join('|')})\b/

/\w+(?:#{('011'..'999').to_a.join('|')})\b/