繁体   English   中英

如何在Ruby中匹配多个正则表达式模式

[英]How to match multiple regex patterns in ruby

我在不同的上下文中看到了多个有关正则表达式模式的问题,但我无法掌握。

我有一个字符串str = "Hello, how are you. Hello, I am lloyds"在这里我想应用多种模式来一次提取所有Helloll以获得["Hello", "Hello", "ll", "ll", "ll"] 我该怎么做?

我唯一能做的就是(一口气不是多个模式)

str = "Hello, how are you. Hello, I am lloyds"
a = []
a << str.scan(/Hello/)
a << str.scan(/ll/)
a.flatten

因为“ ll”在“ Hello”内部,所以要在相同的扫描方法调用中同时包含这两者,就需要一个看上去有点笨拙的表达式,该表达式要双重捕获“ ll”。 这似乎很接近,但是请注意,序列与预期的输出不同,是交错的“ Hello”和“ ll”。 但是,据我所知,这对于任何一次通过字符串的正则表达式都是必要的:

str = "Hello, how are you. Hello, I am lloyds"
a = str.scan( /(He(ll)o|ll)/ ).flatten.compact
 => ["Hello", "ll", "Hello", "ll", "ll"]

紧凑是必要的,因为一个单独的“ ll”将不匹配内部捕获,并且数组可能包含不需要的nil

str = "Hello, how the hello are you. Hello, I am lloyds"
results = []

str.scan(/hello|ll/xmi) do |match|
  target = match.downcase
  results.unshift match if target == 'hello'
  results << 'll'
end

p results

--output:--
["Hello", "hello", "Hello", "ll", "ll", "ll", "ll"]

要么:

str = "Hello, how the hello are you. Hello, I am lloyds"
hello_count = 0
ll_count = 0

str.scan(/Hello|ll/xm) do |match|
  hello_count += 1 if match == 'Hello'
  ll_count += 1 
end

results = ["Hello"] * hello_count + ["ll"] * ll_count 
p results

--output:--
["Hello", "Hello", "ll", "ll", "ll", "ll"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM