代码之家  ›  专栏  ›  技术社区  ›  kitz

Ruby删除字符串的部分

  •  2
  • kitz  · 技术社区  · 9 年前

    我对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 回复  |  直到 8 年前
        1
  •  2
  •   falsetru    9 年前

    您可以使用 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
  •  2
  •   Avinash Raj    9 年前

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

        3
  •  1
  •   Tom Lord    8 年前

    正则表达式语法不正确 . 字符类的内部表示字面上匹配一个点 {*} 匹配一个开头的大括号“零或更多”次,后跟一个结尾的大括号。

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

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