EditPad:需要一个处理多种可能数据格式的正则表达式

时间:2014-04-24 19:09:05

标签: regex editpad

首先,我使用EditPadPro进行正则表达式清理,因此所给出的任何答案都应该在该环境中运行。

我收到了一个包含大量数据的大型电子表格,我每天都需要清理这些数据。我设法将它归结为我运行的几个不同的正则表达式,并且这有效......但我很想知道是否可以减少到单个正则表达式。

以下是一些示例数据:

3-CPC_114851_70095_70095_CAN-bre
3-CPC_114851_70095_70095_CAN
b11-ao1-113775-bre
b7-ao-114441
b7-ao-114441-bre
b7-ao1-114441
b7-ao1-114441-bre
http://go.nlvid.com/results1/?http://bo
go.nlv/results1/?click
b4-sm-1359
b6-sm-1356-bre
1359_195_1453814569-bre
1356_104_1456856729
b15-rad-8905
b15-rad-8905-bre

以上数据需要如何结束:

114851-bre
114851
113775-bre
114441
114441-bre
114441
114441-bre
http://go.nlvid.com/results1/
go.nlv/results1/
sm-1359
sm-1356-bre
sm-1359-bre
sm-1356
rad-8905
rad-8905-bre

因此,有许多规则,例如:

  • 如果超过2个下划线,则结果只需要包含紧跟在第一个下划线之后的值,以及从破折号开始的所有内容。
  • 如果字符串包含" -ao - "," -ao1 - ",则应删除最终数字字符串之前的所有内容。
  • 如果存在问号,则应删除标记以外的所有内容。
  • 如果字符串包含" -sm - "或者" -rad - ",应该删除那些alpha字符串之前的所有内容。
  • 如果字符串包含2个下划线,则在第一个数字字符串之后的所有内容都包含一个短划线 (如果存在的话)应该删除,字符串" sm - "应该加上。

此外,还有其他数据必须保持不变,包括但不限于:

113535|24905|24905

以及xxxxxx | yyyyy | zzzzz的这种模式的许多变化(并不总是那些字符串长度)

这可能会过多地考虑正则表达式,我不确定因为我不是很好。但是我已经看到了一些非常令人印象深刻的事情,所以我想我会把这个问题告诉社区,看看你回来了。

2 个答案:

答案 0 :(得分:1)

试试这个:

  1. 切换搜索面板:SHIFT+CTRL+F
  2. 搜索:.*?((?:sm-|rad-)?(?:(?:\d+|[\w\.]+\/.*?))(?:-\w+)?$)
  3. REPLACE:$1
  4. 检查REGEXWORDS
  5. 点击Replace All或点击CTRL+ALT+F3
  6. 检查下图:

    EditPad Search and Repalace

答案 1 :(得分:1)

Jonathan,我可以将所有这些包装到一个正则表达式中,除了最后一个(将sm-添加到不包含sm的字符串之外)。在这种情况下不可能,因为我们无法捕获“sm”以在替换中重用,并且因为EPP中没有“条件替换”语法。

话虽如此,你可以用EPP 实现你想要的东西,有两个正则表达式和一个宏来链接这两个。

以下是如何。

以下解决方案在EPP中进行测试。

正则表达式1

  1. 按Ctrl + Sh + F进入搜索/替换模式
  2. 在相应的框中输入以下搜索和替换
  3. 在搜索栏的右上角,点击“收藏搜索”下拉列表,选择“添加”,为其命名,例如正则表达式1
  4. 搜索:

    (?mx)^
    (?=(?:[^_\r\n]*?_){3})[^_\r\n]+?_([^_\r\n]+)[^-\r\n]+(-[^\r\n]+)?
    |
    [^\r\n]*?-ao1?-\D*([^\r\n]+)
    |
    ([^\r\n?]*)(?=\?)[^\r\n]+
    |
    [^\r\n]*?-((?:sm|rad)-[^\r\n]+)
    

    <强>替换

    \1\2\3\4\5
    

    正则表达式2

    与上述相同的1-2-3步骤。

    搜索

    ^(?!(?:[^_\r\n]*?_){3})(?=(?:[^_\r\n]*?_){2})(\d+)(?:[^-\r\n]+(-[^\r\n]+)?)
    

    <强>替换

    sm-\1\2
    

    链接正则表达式1和正则表达式2

    1. 顶级菜单:宏,录制宏,给它起个名字。
    2. 点击收藏搜索下拉菜单,选择正则表达式1
    3. 点击全部替换。
    4. 点击收藏搜索下拉菜单,选择正则表达式2
    5. 点击全部替换。
    6. 宏,停止录制。
    7. 每当您想要执行替换序列时,请在“宏”菜单下按名称拉取它。
    8. 测试

      我已根据您的输入测试了我的“Jonathan宏”。结果如下:

      114851-bre
      114851
      113775-bre
      114441
      114441-bre
      114441
      114441-bre
      http://go.nlvid.com/results1/
      go.nlv/results1/
      sm-1359
      sm-1356-bre
      sm-1359-bre
      sm-1356
      rad-8905
      rad-8905-bre