为什么此代码在notepad ++中无法正常工作

时间:2013-10-05 15:26:20

标签: notepad++

3天前,一位朋友给我一个代码来保留一些句子并删除记事本++中不需要的其他句子。今天我的老师告诉我,这段代码并不适用于所有句子,它可以清除我们需要的大多数标签。请帮助我并更正此代码。 对我来说,明天提出我的语料库非常重要。请。

我想在文本中找到一些特殊字符串,然后删除其他字符串。

例如在这句话中:

( (IP-MAT (CONJ vnnd)
      (NP-NOM (D das) (N wort))
      (BED war)
      (PP (P bey)
          (CODE [2])
          (NP-DAT (NPR Gott)))
      (. ,))

我想定期保留:CONJ D N BED P NPR。 并删除此文本中的其他字符串。

第二个例子:

( (IP-MAT-SPE (NP-NOM-LFD (D diser) (NPR Jhesus)
 (, ,)
 (CP-REL-SPE (WNP-1 (WPRO wilcher)) (C 0)
 (IP-SUB-SPE (NP-NOM T-1) (PP (P von) (NP-DAT (PRO euch))) (BEPI ist) (RP auff) (VAN genomen) (PP (P gen) 
 (NP-ACC-XXX (NPR hymel)))))) 
 (, ,) 
 (NP-NOM-RSP (D der)) (RDPI wirt) (VB komen)
(PP (P wie) (CP-ADV-SPE (C 0) (IP-SUB-SPE (NP-NOM (PRO yhr)) (NP-ACC-2 (PRO yhn)) (VBN gesehen) (HVPI habt) 
(IP-INF-SPE (NP-ACC-SBJ ICH-2) (PP (P gen)
(NP-ACC-XXX (NPR hymel))) (VB faren)))))
 (. .)) 

我希望将它们更改为:

D NPR , WPRO C NP-NOM P PRO BEPI RP VAN P NPR , D RDPI VB , P C PRO PRO VBN HVPI NP-ACC-SBJ P NPR VB . –

该代码是: 发现:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

替换为:

$1 

[美元,然后是“1”,然后是空间]

但它不适用于以下句子:

 (IP-MAT (CODE [4])
        (CONJ vnd)
      (NP-NOM *con*) 
      (RDD wurden)
      (Q alle) 
      (ADJP (ADJ voll)
        (NP-GEN (D des)
            (ADJ heyligen)
            (NPR geysts)))
      (. ,)) (ID SEPTEMBERTESTAMENT-ACTS,.45))

必须显示:CONJ NP-NOM RDD Q ADJP D ADJ D ADJ NPR。

或在此代码中不起作用:

( (IP-MAT (CODE [7])
      (NP-NOM (PRO sie))
      (VBD entsatzten)
      (NP-ACC-RFL (PRO sich))
      (ADVP (ADV aber))
      (Q alle)
      (. ,)
      (IP-MAT (NP-NOM *con*) 
          (VBD verwunderten)
          (NP-ACC-RFL (PRO sich)))
      (IP-MAT (CONJ vnnd)
          (NP-NOM *con*) 
          (VBD sprachen)
          (PP (P+D+ADJ vnternander))
          (, ,)

必须显示:NP-NOM VBD PRO ADV Q. NP-NOM VBD PRO CONJ NP-NOM VBD P + D + ADJ,

或关于此示例:

 (IP-MAT-SPE (CODE [8]) 
          (CP-QUE-SPE (WADVP (WADV wie))
              (IP-SUB-SPE (VBPI horen)
                      (NP-NOM (PRO wyr)
                          (NP-NOM-PRN *ICH*-1))
                      (ADVP (ADV denn))
                      (, ,)
                      (NP-NOM-PRN-1 (D eyn) (ADJ iglicher))
                      (NP-ACC (PRO$ seyne) (N sprach)
                          (, ,)
                          (CP-REL-SPE (WPP-2 (WADV $dar) (P $ynnen))
                              (C 0) 
                              (IP-SUB-SPE (PP *T*-2)
                                      (CODE {TEXT:darynnen})
                                      (NP-NOM (PRO wyr))
                                      (VAN geporn)
                                      (BEPI sind))))))
          (. ?)) (ID SEPTEMBERTESTAMENT-ACTS,.52))

必须显示:WADV VBPI PRO NP-NOM-PRN ADV,D ADJ POR $ N,WADV P C PP PRO VAN BEPI。

不幸的是,该代码删除了PRO $或NP-NOM或PP或Q + N等。

请原谅我无法编辑这篇文章。我希望我的代码能够出现在所有人面前。 如果不是,我可以上传语料库文本文件。

1 个答案:

答案 0 :(得分:0)

好吧,采取以前的正则表达式:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

您可以按照指示将字符添加到可用的字符类中:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$
                           ^^^^^^^     ^^^^^^^

更改第二个和/或第一个以包含更多字符,例如,使用[\w,.$-]将允许保留PRO$。只需确保在最后一个连字符之前插入额外的字符或正则表达式将会中断。

请参阅:

(?:(?!\n\n).(?<!\n\n))*?\(([$\w,.+-]+)\s+[$\w,.*?-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

我添加了更多字符,但有些事情我认为不常规,或者你做了一些错别字,比如你在问题中没有提到的ID

还记得我上次关联你的正则表达式演示网站吗?这些样本See it again。你可以玩它;并注意在更换后保留绿色部分时会删除蓝色部分。