我有一个很长的字符串,大约有2000个字符。字符串是段的连接,每个段的前两个字符作为段指示符。
Eg-' 11xxxxx 12yyyy 14dddd gghgfbddc 0876686589 SANDRA COLINS 201 STMONK CA'
现在我想用指标14提取段。
我用以下方法实现了这个目标:
str.split(' ').each do |substr|
if substr.starts_with?('14')
key = substr.slice(2,5).to_i
break
end
end
我觉得应该有更好的方法来做到这一点。我无法在ruby中找到更直接和一行的字符串匹配解决方案。请有人建议更好的方法。
答案 0 :(得分:1)
您并不完全清楚自己在寻找什么,因为您的示例字符串会显示字母,但您的标题会显示数字。无论哪种方式,这对于正则表达式来说都是一项很好的任务。
foo = '12yyyy 014dddd 14ddddd gghgfbddc'
bar = '12yyyy 014dddd 1499999 gghgfbddc'
baz = '12yyyy 014dddd 14a9B9z gghgfbddc'
foo[/\b14[a-zA-Z]+/] # => "14ddddd"
bar[/\b14\d+/] # => "1499999"
baz[/\b14\w+/] # => "14a9B9z"
foo[/\b14\S+/] # => "14ddddd"
bar[/\b14\S+/] # => "1499999"
baz[/\b14\S+/] # => "14a9B9z"
在模式中:
\b
表示分词,因此模式必须从空格或标点符号之间的过渡开始。[a-zA-Z]+
表示一个或多个字母。\d+
表示一个或多个数字。\w+
表示一个或多个字母,数字和'_'
。这相当于字符集[a-zA-Z0-9_]+
。\S+
表示非空格,如果您希望所有内容都占用空间,则非常有用。 哪些适合您的用例由您决定。