Ruby删除字符串的一部分

Ruby删除字符串的一部分,ruby,regex,string,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 i

我对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'单词的文本,但这不起作用。我不知道如何解决这种情况。你能帮我吗?

你可以使用
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 --- "]
>s=“NU POSTA a aşa ceva pe Facebook!“Prostia se plăteşte”
“洛杉矶:10.02.2015 10:20 Ultima Realizare:10.02.2015 10:35
“通过电子邮件发送护理服务的地址,请发送给我方
“Aboneazăte
“----这里有一些有用的全文--”
“Aboneazăte
“×”西提·梅尔特·穆尔特»
“一个联合国秘书处”
=>“NU POSTA aşa ceva pe Facebook!”Prostia se plăteşte“\n出版时间:2015年2月10日10:20最终实现时间:2015年2月10日10:35 \n电子邮件服务中心地址:primesti STIREA Atunce cand se in Templa\n\n-这里有一些有用的全文---\n nAboneazăte\n×Citeşte mai mult»\n
irb(main):010:0>s.scan(/(?[“----这里是一些有用的全文----”]
如有必要,请删除环视框中的换行符。
[\s\s]*?
将对空格或非空格字符进行零次或多次非贪婪匹配


您可以使用正则表达式,然后使用第二部分:

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 --"]

您的正则表达式语法不正确。
在字符类中表示按字面意思匹配一个点,
{*}
匹配开始的大括号“零次或多次”,然后是结束的大括号

您可以在此处进行匹配,而不是替换

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

谢谢!这是一个有趣的选择。@kitz这不是一个选择。这是正确的选择。其他使用
scan
gsub
的答案在战略上是错误的。如果
s=“NU Abonează-te\n-这里有一些Abonează-te文本--\nAboneazăte comentariu“
?很好,但是你不能通过添加一个捕获组并用包含锚定的非捕获组替换lookarounds来增强它吗?(读者:Ruby的lookarounds不能包含可变长度的匹配,如果不包含在多汁位之前和之后的整个文本,则需要使用锚定。)一个小请求:你能删除IRB提示吗?它们冒犯了我的感情。你是说这个
s.scan(/Abonează-te.*\n([\s\s]*?)\nAbonează-te/)[0]
。啊,我忘了。@CarySwoveland请检查我的编辑是否正确。对于
s=“NU Abonează-te\n--这里有一些有用的Abonează-te文本--\nAbonează-te comentariu”
s[/(?:^.*?Abonează-te\n)(*?(:\nAbonează-te.*$)/,1]ŧ=>“--这里有一些有用的Abonează-te文本——”