如何扫描其中包含特定字符的子字符串

时间:2015-12-17 22:00:33

标签: ruby regex

这是这个问题的后续行动。 How to scan and return a set of words with specific characters in them in Ruby

我们希望扫描以某组字母开头的单词,然后将它们以数组形式返回。像这样:

 b="h ARCabc s and other ARC12".scan(/\w+ARC*\w+/)

然后回来:

["ARCabc","ARC12"]

我该怎么做(我知道这与我昨天的要求非常相似)?

2 个答案:

答案 0 :(得分:4)

只需使用以下正则表达式:

\bARC\w*\b

或(从匹配中排除下划线)

\bARC[[:alnum:]]*\b

请参阅regex demo

正则表达式匹配:

  • \b - 一个单词边界(ARC仅在一个单词的开头)
  • ARC - 固定的字符序列
  • \w* - 0个或更多字母,数字或下划线。 注意:如果您只想将匹配限制为字母和数字,请将此\w*替换为[[:alnum:]]*
  • \b - 单词(尾随)边界的结尾。

请参阅IDEONE demo here(输出:ARCabcARC12)。

NOTE2 :如果您计划匹配Unicode字符串,请考虑使用以下任一regexp:

  • \bARC\p{Word}*\b - 此变体将在ARC
  • 之后匹配带下划线的字词
  • \bARC[\p{L}\p{M}\d]*\b - 此正则表达式将匹配ARC后仅包含数字和Unicode字母的单词。

答案 1 :(得分:1)

为了便于阅读,您可以将字符串拆分为单词,然后选择所需的字符串:

str = "h ARCabc s and other ARC12"
target = "ARC"

str.split.select { |w| w.include?(target) }
  #=> ["ARCabc", "ARC12"] 

如果单词必须以target开头:

str.split.select { |w| w.start_with?(target) }