Ruby删除字符串的一部分

时间:2015-02-10 16:04:25

标签: ruby regex string

我在Ruby中遇到一些正则表达式的问题。情况就是这样: 输入文字:

"NU POSTA aşa ceva pe Facebook! „Prostia se plăteşte”
Publicat la: 10.02.2015 10:20 Ultima actualizare: 10.02.2015 10:35
Adresa de e-mail la care vrei sa primesti STIREA atunci cand se intampla
Abonează-te
---- Here is some usefull text --- 
Abonează-te
× Citeşte mai mult »
Adauga un comentariu"

我需要一个正则表达式,只能在“Abonează-te”字之间提取有用的文字。

我尝试了这个result = result.gsub(/^[.]{*}\nAbonează-te/, '')来删除从字符串开头到'Abonează-te'字样的文本,但这不起作用。我不知道如何解决这种情况。你能救我吗?

3 个答案:

答案 0 :(得分:2)

您可以使用string.scan功能。您不需要在要提取特定文本的地方使用string.gsub功能。

> s = "NU POSTA aşa ceva pe Facebook! „Prostia se plăteşte”
" Publicat la: 10.02.2015 10:20 Ultima actualizare: 10.02.2015 10:35
" Adresa de e-mail la care vrei sa primesti STIREA atunci cand se intampla
" Abonează-te
" ---- Here is some usefull text --- 
" Abonează-te
" × Citeşte mai mult »
" Adauga un comentariu"
=> "NU POSTA aşa ceva pe Facebook! „Prostia se plăteşte”\nPublicat la: 10.02.2015 10:20 Ultima actualizare: 10.02.2015 10:35\nAdresa de e-mail la care vrei sa primesti STIREA atunci cand se intampla\nAbonează-te\n---- Here is some usefull text --- \nAbonează-te\n× Citeşte mai mult »\nAdauga un comentariu"
irb(main):010:0> s.scan(/(?<=Abonează-te\n)[\s\S]*?(?=\nAbonează-te)/)
=> ["---- Here is some usefull text --- "]

如有必要,请删除内容中存在的换行符\n字符。 [\s\S]*?将对空格或非空格字符进行零次或多次非贪婪匹配。

DEMO

答案 1 :(得分:2)

您可以使用String#split,而不是使用正则表达式,然后使用第二部分:

s = "NU POSTA aşa ceva pe Facebook! „Prostia se plăteşte”
Publicat la: 10.02.2015 10:20 Ultima actualizare: 10.02.2015 10:35
Adresa de e-mail la care vrei sa primesti STIREA atunci cand se intampla
Abonează-te
---- Here is some usefull text --- 
Abonează-te
× Citeşte mai mult »
Adauga un comentariu"
s.split('Abonează-te', 3)[1].strip  # 3: at most 3 parts
# => "---- Here is some usefull text ---"

<强>更新

如果你想获得多场比赛:

s = "NU
Abonează-te
-- Here's some
Abonează-te
text --
Abonează-te
comentariu"
s.split('Abonează-te')[1..-2].map(&:strip)
# => ["-- Here's some", "text --"]

答案 2 :(得分:1)

你的正则表达式语法不正确.在一个字符类中意味着字面匹配一个点,而{*}匹配一个开头大括号“零或更多”次,然后是一个结束大括号。< / p>

您可以匹配而不是替换此处。

s.match(/Abonează-te(.*?)Abonează-te/m)[1].strip()