我希望将所有以“!”结尾的单词与此标记匹配:
<div>Why I love! you so much</div>
在这种情况下,我希望匹配爱这个词!因为有一个!
现在,我制作了这个漂亮的正则表达式:
(?-s)(<div>)*\w+!(?!\w*;)(?=[^<]*</div>)
替换后,我的标签应如下所示:
<div>Why I love you so much</div>
所以,我想使用这个正则表达式,在几个.html文件中替换所有那些!
Basicaly的标签,我想从这些标签中删除它们。我试着替换!有一个空的空间,如:
搜索:(?-s)(<div>)*\w+!(?!\w*;)(?=[^<]*</div>)
替换为:\1\2(LEAVE EMPTY)
但是不起作用。任何人都可以帮助我吗?
基本上,我想从几个文件中删除所有粘贴在这些标签中的单词的!
。
答案 0 :(得分:1)
尝试
(<([^>]+)>[^>]*?[ ]\w+?)\!([^>]*?<\/\2>)
替换为
\1\3
然后
This is not! in tag.
<div>Why I love! you so! much </div> This is not! in tag. <div>Why I love! you so! much </div>
这将被替换为
This is not! in tag.
<div>Why I love you so! much </div> This is not! in tag. <div>Why I love! you so! much </div>
首先删除!在<div>
标记中。
无法立即删除!来自Notepad ++上面示例中的love!
和so!
,因为它只能在同一行中处理一次,所以很遗憾,您必须继续替换,直到找不到为止。但你可以编写Python脚本来做到这一点。然后,只需单击一次即可完成所有文件,甚至文件夹中的所有文件都值得编写,或者更高级的文本编辑器如Vim :)如果编写脚本,可以指定是否要重复处理相同的文件或者只需一次进入相同的行/字符串,这样你就可以做更多的事情了。
关于正则表达式,
<([^>]+)>
代表示例中的</div>
,[^>]+
表示“>
以外的任何内容”。因此,这会阻止<AAA><BBB>
获取AAA><BBB
作为匹配AAA
,因为正则表达式会选择更长的匹配。因此,<([^>]+)>
是编写HTML标记的一般方法,它也可以与<a href=....>
之类的长HTML标记匹配。
答案 1 :(得分:1)
您可以使用纯正则表达式删除粘贴到单词结尾的!
,然后单击一下搜索和替换按钮:
(?:\G(?!^)|<div>)[^<]*?\K\b!\B
请参阅regex demo。要在单词和!
之间插入空格,只需替换为 !
。
模式详情
(?:\G(?!^)|<div>)
- <div>
子字符串(<div>
)或(|
)上次成功匹配的结尾(\G(?!^)
)[^<]*?
- 除了<
以外的任何0 +字符,尽可能少,因为*?
是一个懒惰的量词\K
- match reset operator丢弃与匹配缓冲区匹配的所有文本\b
- 一个单词边界(紧靠!
之前,应该有一个单词char)!
- !
\B
- 非字边界(紧跟!
之后,应该有非字char或字符串结尾)。