我有一个类似的问题用于数字,这次我需要将它用于关键字。以下是我在KML文件中使用的示例数据。我想删除所有包含单词footway的地标。
<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 :(得分:1)
这是一种方法:
int sumdiff(int* t, int size){
int sum=0;
for (int i=0; i<=size;i++){
for(int j=i; j<=size;j++){
if(t[i]!=t[j])
sum=sum+t[i];
}
}
return sum;
}
int main()
{
int t[4]={3, 3, 1, 5};
cout << sumdiff(t, 4);
}
25
这将替换包含<Placemark>(?:(?!<Placemark).)*footway(?:.(?!<Placemark))*</Placemark>
且仅包含NOTHING
的所有<Placemark>
块。
footway
是否为lookahead,假设(?!<Placemark)
之前没有<Placemark>
,那么,当您有很多footway
&#39时; s正则表达式一次匹配一个<Placemark>
。
<Placemark>
是非捕获组,发生次数为0次或以上且不包含(?:(?!<Placemark).)*
后跟一个字符。
答案 1 :(得分:0)
这对我来说是Notepad ++ 6.9.2。它也适用于这个在线python正则表达式测试器:http://codeforces.com/blog/entry/43499
您确定自己设置了正确的选项(regular expression
+ . matches newline
)吗?
编辑:嗯,在您编辑之后,这是一个不同的故事!不知道如何使用正则表达式实现它。我认为解析XML然后去除包含单词footway的节点会更容易。
答案 2 :(得分:0)
简化文件,它看起来像下面的第一行,正则表达式按照第二行匹配
<Placemark> ... </Placemark> <Placemark> ...footway ... </Placemark>
<Placemark> .*? footway .*? </Placemark>
需要阻止匹配中包含第一个</Placemark>
。
如果这是一次性或很少需要的过程,那么我有时使用的方法,因为它具有很强的适应性,如下所示。查找文件中未出现的单个字符。对于此示例,使用=
。使用(</?p)(lacemark>)
替换所有正则表达式\1=\2
。通向文本:
<P=lacemark> ... </P=lacemark> <P=lacemark> ...footway ... </P=lacemark>
然后使用正则表达式<P=lacemark>[^=]*footway[^=]*</P=lacemark>
替换所有内容。最后,使用另一个替换全部删除所有=
个字符。
如果没有易于使用的单个字符(即代替=
),则在上述步骤之前加上一些替换来创建一个未使用的字符。例如,首先将所有&
替换为&
,然后将所有=
替换为&eq;
。现在=
可免费使用。完成上述步骤后,撤消替换,首先将所有&eq;
替换为=
,然后将所有&
替换为&
。