簡體   English   中英

Ruby刪除字符串的一部分

[英]Ruby remove parts of a 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'單詞的文本刪除,但這不起作用。 我不知道如何解決這種情況。 你能幫助我嗎?

您可以使用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

除了使用正則表達式,還可以使用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 ---"

UPDATE

如果要獲得多個匹配項:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM