正则表达式:在字符串中删除文本

时间:2018-03-07 20:05:11

标签: regex notepad++

我有像

这样的文字
5 Cm Per Second - Makoto Shinkai Collection (2007) 3xDVD5 Copia 11 ITA JAP FRA MultiSub
Ai City - La Notte Dei Cloni (1986) DVD9 ITA JAP Sub ITA
Akira - The Ultimate Edition 3xDVD9_5 MULTI
AIKA (1997) (2xDVD5) MHost Ita Serie Completa

我想获得3种不同的解决方案

1。 名称+(年)

5 Cm Per Second - Makoto Shinkai Collection (2007)
Abenobashi (2002)
Ai City - La Notte Dei Cloni
Akira - The Ultimate Edition (2005)

2。 仅限年份

2007
1986
<empty row> => I need to mantain like empty row
1997

3。 说明

3xDVD5 Copia 11 ITA JAP FRA MultiSub
(4xDVD9) MHost Ita Serie Completa
The Ultimate Edition 3xDVD9_5 MULTI
(2xDVD5) MHost Ita Serie Completa
##

我在Notepad ++上尝试这些正则表达式(替换为空)

  1. ^.*(?=\))
  2. \((.*?)\]
  3. I don't know
  4. 但效果不好,无法在整个字符串中删除文本

    @zzxyz

    我试试你的正则表达式,但如果我有

    则不行
    Hayao Miyazaki Collection (1979 - 2009) FullHD 1080p
    Milo su Marte (2010) BluRay Rip 1080p x264 MKV ITA ENG - NST
    Tokyo Ghoul (2014) BDRip 1080p DTS-HD MA 5.1+AC3 5.1 ITA AC3 2.0 JAP Sub ITA MKV-FBT
    

1 个答案:

答案 0 :(得分:0)

对于您的问题,最好捕获您想要的文本并用它替换整行。这可以捕获您感兴趣的数据,并允许您重建它(在替换行中):

^(.*?) \s? (\(\d{4}\))? \s? (\(?\d*?x?DVD.*?)$

$1是名称,$2是日期(可选),$3是说明

https://regex101.com/r/Y8MbHO/2

哦,对不起。 您需要删除正则表达式中的空格。为了清晰起见,我将其放入。

因此#1的替换字符串为$1 $2,#2为$2,而#3为$3

我应该注意\(\)是字面值,而()是捕获组。因此,如果您不想捕获(\(\d{4}\))?但希望捕获\(?(\d{4})?\)?

,则日期部分(1986)看起来像1986

编辑: 如果日期始终存在,您可以使用:

^(.*?) \s? (\(\d{4}-?\d*?\)) \s? (.*?)$