2016-11-22 57 views
0

我有一個類似的問題,這次用於數字,我需要將它用於關鍵字。以下是我從KML文件中使用的示例數據。我想刪除包含單詞footway的所有地標。記事本++ RegEx在單詞匹配時在標籤之間移除

<Placemark> 
     <styleUrl>#nothing</styleUrl> 
     <ExtendedData> 
      <SchemaData> 
       <SimpleData>highway</SimpleData> 
      </SchemaData> 
     </ExtendedData> 
     <LineString> 
      <coordinates>0.0000,0.0000,0</coordinates> 
     </LineString> 
    </Placemark>  
    <Placemark> 
     <styleUrl>#nothing</styleUrl> 
     <ExtendedData> 
      <SchemaData> 
       <SimpleData>footway</SimpleData> 
      </SchemaData> 
     </ExtendedData> 
     <LineString> 
      <coordinates>0.0000,0.0000,0</coordinates> 
     </LineString> 
    </Placemark> 

我試着用以下但它是捕捉一切

(?i)<Placemark>.*?footway.*?</Placemark> 

下面是我的記事本+ +設置

Find what: (?i)<Placemark>.*?footway.*?</Placemark> 
Replace with: 
Warp around 
Search Mode: Regular expression & mathces newline 
+0

你想刪除完整的'Placemark'標籤,對吧?似乎與我的記事本++。你正在使用哪個版本? – lazlev

+0

是的,我想刪除標籤。我正在使用verison 6.9.1。我無法升級超出此版本 – JeremyA1

回答

1

這裏有很長的路要走:

  • 查找內容:<Placemark>(?:(?!<Placemark).)*footway(?:.(?!<Placemark))*</Placemark>
  • 替換爲:NOTHING

這將替換包含所有<Placemark>footway只有他們。

(?!<Placemark)是負lookahead,它假定是footway之前沒有<Placemark>,所以,當你有很多<Placemark>的正則表達式一個<Placemark>在時間相匹配。

(?:(?!<Placemark).)*是非捕獲組中,發生0次或更多次,並且不包含(?!<Placemark)後跟一個字符。

+0

@ JeremyA1:不客氣,查看我的編輯 – Toto

0

這是爲我工作用記事本++ 6.9.2。它也可以在這個網上蟒蛇正則表達式測試儀:https://regex101.com/r/BYGvzo/1

你確定你有(regular expression + . matches newline)設置正確的選項?

編輯:好吧,編輯後,這是一個不同的故事!不知道如何用正則表達式來實現它。我認爲解析XML然後擺脫包含單詞footway的節點會更容易。

瞭解爲什麼:RegEx match open tags except XHTML self-contained tags

+0

我看到的問題是,它匹配所有內容,直到它到達人行道。 https://regex101.com/r/BYGvzo/2 – JeremyA1

0

簡化您的文件,它看起來像下面的第一行和正則表達式匹配是按照第二行

<Placemark> ... </Placemark> <Placemark> ...footway ... </Placemark> 
<Placemark> .*?       footway .*? </Placemark> 

需要防止第一</Placemark>被列入比賽。

如果這是一次性的或很少需要的過程,那麼我有時使用的方法,因爲它是非常適應性的如下。找到文件中任何地方都不會出現的單個字符。對於這個例子,使用=。用\1=\2替換所有正則表達式(</?p)(lacemark>)。以領先的文字:

<P=lacemark> ... </P=lacemark> <P=lacemark> ...footway ... </P=lacemark> 

然後做一個替換,所有的正則表達式<P=lacemark>[^=]*footway[^=]*</P=lacemark>什麼也沒有。最後,用另一個replace-all刪除所有=字符。

如果沒有易於使用的單個字符(即某些東西而不是=),則在上述步驟之前進行一些替換以創建未使用的字符。例如首先將所有&替換爲&amp;,然後將所有=替換爲&eq;。現在=可免費使用。完成上述步驟後,撤消替換,首先將所有&eq;替換爲=,然後將所有&amp;替換爲&

相關問題