【问题标题】:Search and Replace SSN between tags在标签之间搜索和替换 SSN
【发布时间】:2015-09-04 08:35:19
【问题描述】:

我想搜索 SSN 并删除破折号。但我需要确保 SSN 介于两者之间

<Employee_ID>111-22-3333</Employee_ID>

只有文件中的其他地方,而不是其他地方。有人可以帮忙,所以我最终得到了

<Employee_ID>111223333</Employee_ID>

【问题讨论】:

    标签: regex search replace notepad++


    【解决方案1】:

    查找内容: (\d{3})-(\d{2})-(\d{4})
    替换为: \1\2\3

    说明:

    第一个捕获组 (\d{3})
    \d 匹配一个数字 [0-9]
    量词:{3} 正好 3 次 - 所以这匹配 3 位数字

    第二个捕获组 (\d{2}) 匹配 2 个数字
    第三个捕获组(\d{4}) 匹配4位数字

    【讨论】:

    • 在 Notepad++ 中检查和工作 - 不知道你可以使用 \1\2\3 - 我学到了一些东西
    • OP 明确表示:“在 &lt;Employee_ID&gt;...&lt;/Employee_ID&gt; only 之间,而不是文件中的其他位置”。您的解决方案替换了所有 SSN,没有检查封闭标签。
    • @Bentoy 请查看帖子编辑历史记录。在我写答案时,问题中不存在标签。
    【解决方案2】:

    搜索

    (?<=<Employee_ID>)(\d{3})-?(\d{2})-?(\d{4})(?=</Employee_ID>)
    

    使用正则表达式作为搜索模式并替换为

    $1$2$3
    

    (?&lt;=&lt;Employee_ID&gt;)lookbehind assertion,确保“&lt;Employee_ID&gt;”在 SSN 之前但不匹配。

    (?=&lt;/Employee_ID&gt;)lookahead assertion,确保“&lt;/Employee_ID&gt;”跟随 SSN 但不匹配。

    $x 是括号中其他三个capturing groups 的内容。

    【讨论】:

    • 已检查并在 Notepad++ 中工作 - 从未使用正则表达式进行后视和前瞻...非常有用
    • 为什么可选破折号-? 而不仅仅是破折号-
    • @Bentoy13,我不习惯SSN,以为有时可能只有1个破折号,如果两个破折号被修复,问号当然可以删除。
    • 这正是我想要的,而且效果很好。谢谢。
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2015-01-09
    • 2015-02-26
    • 2015-08-20
    • 2014-12-09
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多