【发布时间】:2015-09-04 08:35:19
【问题描述】:
我想搜索 SSN 并删除破折号。但我需要确保 SSN 介于两者之间
<Employee_ID>111-22-3333</Employee_ID>
只有文件中的其他地方,而不是其他地方。有人可以帮忙,所以我最终得到了
<Employee_ID>111223333</Employee_ID>
【问题讨论】:
标签: regex search replace notepad++
我想搜索 SSN 并删除破折号。但我需要确保 SSN 介于两者之间
<Employee_ID>111-22-3333</Employee_ID>
只有文件中的其他地方,而不是其他地方。有人可以帮忙,所以我最终得到了
<Employee_ID>111223333</Employee_ID>
【问题讨论】:
标签: regex search replace notepad++
查找内容: (\d{3})-(\d{2})-(\d{4})
替换为: \1\2\3
说明:
第一个捕获组 (\d{3})\d 匹配一个数字 [0-9]
量词:{3} 正好 3 次 - 所以这匹配 3 位数字
第二个捕获组 (\d{2}) 匹配 2 个数字
第三个捕获组(\d{4}) 匹配4位数字
【讨论】:
<Employee_ID>...</Employee_ID> only 之间,而不是文件中的其他位置”。您的解决方案替换了所有 SSN,没有检查封闭标签。
搜索
(?<=<Employee_ID>)(\d{3})-?(\d{2})-?(\d{4})(?=</Employee_ID>)
使用正则表达式作为搜索模式并替换为
$1$2$3
(?<=<Employee_ID>) 是lookbehind assertion,确保“<Employee_ID>”在 SSN 之前但不匹配。
(?=</Employee_ID>) 是lookahead assertion,确保“</Employee_ID>”跟随 SSN 但不匹配。
$x 是括号中其他三个capturing groups 的内容。
【讨论】:
-? 而不仅仅是破折号-?