这是这个问题的后续行动。 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"]
我该怎么做(我知道这与我昨天的要求非常相似)?
答案 0 :(得分:4)
只需使用以下正则表达式:
\bARC\w*\b
或(从匹配中排除下划线)
\bARC[[:alnum:]]*\b
请参阅regex demo
正则表达式匹配:
\b
- 一个单词边界(ARC
仅在一个单词的开头)ARC
- 固定的字符序列\w*
- 0个或更多字母,数字或下划线。 注意:如果您只想将匹配限制为字母和数字,请将此\w*
替换为[[:alnum:]]*
。\b
- 单词(尾随)边界的结尾。请参阅IDEONE demo here(输出:ARCabc
和ARC12
)。
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) }