鉴于我有一个类似(但不完全相同)的字符串:
"\ndigfodigjn \nfdoigoidfgj \nResidence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\ngfhfgh gfhgfh \ndfijoij"
它将包含子字符串" Residence
"。我想在那之后提取3个子串。每个都将由换行符分隔,但不保证整个字符串中的换行符总数。唯一的保证是在Residence子串之后,将有三个子串表示由换行符分隔的地址。
我想要这个:
123 N 74TH STREET Philadelphia PA 19020
我能够以这种方式获得Residence子串:
str.split("\n").detect {|s| s =~ /^Residence/ }
但是我怎样才能获得我想要的子串呢?
答案 0 :(得分:0)
假设:
> s="\ndigfodigjn \nfdoigoidfgj \nResidence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\ngfhfgh gfhgfh \ndfijoij"
您可以使用regex对多行字符串进行切片,然后捕获3行:
> s[/Residence\s*([^\n]*\n[^\n]*\n[^\n]*\n)/]
=> "Residence\n123 N 74TH STREET \nPhiladelphia\nPA 19020\n"
或者,如果您只想要捕获组部分:
> s[/Residence\s*([^\n]*\n[^\n]*\n[^\n]*\n)/,1]
=> "123 N 74TH STREET \nPhiladelphia\nPA 19020\n"
如果您需要三个字符串,则可以在"\n"
上拆分。
答案 1 :(得分:0)
根据@dawg的回答,它可以解决问题:
s[/Residence(\n[^\n]+){3}/].split("\n")[1..3]
正则表达式将查找Residence
然后它会查找3个换行符,其中包含任何非换行符。
结果字符串可以用新行分割,最后3个元素的地址为
答案 2 :(得分:0)
尝试使用回顾表达式:
> str[/(?<=Residence)(\n[^\n]+){3}/].split("\n").join
=> "123 N 74TH STREET PhiladelphiaPA 19020"