首先,我使用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
因此,有许多规则,例如:
此外,还有其他数据必须保持不变,包括但不限于:
113535|24905|24905
以及xxxxxx | yyyyy | zzzzz的这种模式的许多变化(并不总是那些字符串长度)
这可能会过多地考虑正则表达式,我不确定因为我不是很好。但是我已经看到了一些非常令人印象深刻的事情,所以我想我会把这个问题告诉社区,看看你回来了。
答案 0 :(得分:1)
试试这个:
SHIFT+CTRL+F
.*?((?:sm-|rad-)?(?:(?:\d+|[\w\.]+\/.*?))(?:-\w+)?$)
$1
REGEX
和WORDS
Replace All
或点击CTRL+ALT+F3
检查下图:
答案 1 :(得分:1)
Jonathan,我可以将所有这些包装到一个正则表达式中,除了最后一个(将sm-
添加到不包含sm
的字符串之外)。在这种情况下不可能,因为我们无法捕获“sm”以在替换中重用,并且因为EPP中没有“条件替换”语法。
话虽如此,你可以用EPP 实现你想要的东西,有两个正则表达式和一个宏来链接这两个。
以下是如何。
以下解决方案在EPP中进行测试。
正则表达式1
搜索:强>
(?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
测试
我已根据您的输入测试了我的“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