我在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'字样的文本,但这不起作用。我不知道如何解决这种情况。你能救我吗?
答案 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]*?
将对空格或非空格字符进行零次或多次非贪婪匹配。
答案 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()