我必须从 17k 文件中删除所有 loginID。如何删除除两个字符串之间的内容之外的所有文本?
例如:
<USER_LOGIN_ID>user1</USER_LOGIN_ID>
<USER_LOGIN_ID>user2</USER_LOGIN_ID>
<USER_LOGIN_ID>user3</USER_LOGIN_ID>
<USER_LOGIN_ID>user4</USER_LOGIN_ID>
会离开
用户1
用户2
用户3
用户4
答案1
这是一个稍微复杂的正则表达式:
查找:<USER_LOGIN_ID>([^<]*)</USER_LOGIN_ID>
替换:$1
这里您要匹配<USER_LOGIN_ID>
,后跟任意数量的非 字符<
,后跟</USER_LOGIN_ID>
。括号()
将中心文本标记为字段,并$1
在替换字符串中仅扩展到此匹配的字段。
对于每行仅显示一个匹配项的情况,您可以使用稍微简单的查找字符串<USER_LOGIN_ID>(.*)</USER_LOGIN_ID>
,但如果每行有两个登录,此方法将会失败。
如果一行上有多个登录信息,则第一个查找将连接这些字符串,除非源文本中有中间标点符号(如果没有,则必须将其添加到替换字符串中,例如$1
- 后面跟着空格)。
当然,您需要在选项中标记正则表达式(可能还需要匹配大小写)。
答案2
搜索:
<USER_LOGIN_ID>(.*?)</USER_LOGIN_ID>
用。。。来代替:
\1
该表达式.*?
表示介于两个指定标签之间的最短文本。(问号使匹配非贪婪。)