使用 RegEx 稍微提高你的工作效率
不要在生产中使用它
工具
有用的正则表达式
概括
我喜欢RegEx,我每天都使用它,我将向您展示如何使用它轻松完成一些较小和较大的任务。
但...
不要在生产中使用它
好的,首先要做的事情是:如果您不完全确定是否确实有必要,那么在生产代码中使用 RegEx 时一定要非常小心。
这是一个可能发生的情况的例子。在 95% 的情况下,使用简单的循环来遍历数据,使用类似String.contains()
或 之类的函数String.split(delimiter)
来搜索和分解字符串,会更加安全,也更容易理解。
[编辑] 需要明确的是:我的意思就是我上面说的。不要在生产环境中使用我在这里展示的任何东西。我个人只在日志文件、测试数据和手动创建数据时使用它。
工具
我其实没有用什么特别的工具。所有或多或少比较复杂的文本编辑器或 IDE 都支持正则表达式的搜索和替换。我个人大部分工作都是用Sublime Text完成的,有时也用IntelliJ。
有用的正则表达式
这是我在日常生活中最常使用 RegEx 的方式。
替换行首行尾
假设你有以下文本
Flour
Eggs
Milk
Salt
Maple sirup
如果你想创建一个项目符号列表。你当然可以*
在每行前面手动输入一个。当然,你也可以使用正则表达式。
搜索 | 替换为 |
---|---|
^ |
* |
这将导致:
* Flour
* Eggs
* Milk
* Salt
* Maple sirup
是^
一个特殊字符,用于匹配行首。将其替换为一个或多个字符即可为每行添加前缀。
行尾也一样。假设你需要在每行末尾添加一个逗号。
"Foo"
"Bar"
"Baz"
搜索 | 替换为 |
---|---|
$ |
, |
"Foo",
"Bar",
"Baz",
最后一个逗号可能没有必要,因此必须手动删除。虽然有一个更复杂的搜索方法可以解决这个问题,但大多数情况下并不值得。最好让正则表达式来处理繁重的工作,然后手动修复由此产生的 2%。
交换列
假设我们得到以下数据
"foo":8,
"bar":42,
"baz":13,
搜索 | 替换为 |
---|---|
"(\w+)":(\d+), |
"$2":"$1", |
"8":"foo",
"42":"bar",
"13":"baz",
这里发生了什么?我们正在使用组。组由括号分隔。所以我们有(group1)(group2)(group3)
。组的好处在于以后可以使用它们。在 Sublime 中,$n
使用 ,其中n
组索引从 1 开始。注意,我们没有在组内包含,
和。在每个组中,我使用匹配单个数字,匹配一个单词字符,例如 az、AZ、0-9 和,但没有使用eg匹配一个或多个此类字符。"
\d
\w
_
-
+
将 CSV 转换为 JSON
假设我们有以下 CSV:
1,35,"Bob"
2,42,"Eric"
3,27,"Jimi"
搜索 | 替换为 |
---|---|
(\d+),(\d+),"(\w+)" |
{"id":$1,"age":$2,"name":"$3"}, |
结果:
{"id":1,"age":35,"name":"Bob"},
{"id":2,"age":42,"name":"Eric"},
{"id":3,"age":27,"name":"Jimi"},
再次,我们使用组和数字或单词匹配器。
通过添加包装器对象和数组以及删除最后一个逗号,转换后的结果可以轻松转换为有效的 JSON。但最繁重的工作由正则表达式完成。
创建测试数据
有时我需要大量的测试数据。
我通常的做法是使用 Excel 创建一个数字序列。没错,就是 Excel。Excel 在处理序列方面非常智能。例如,你可以输入类似以下内容:
# |
---|
10 |
20 |
然后选择并拖动右下角的按钮来填充下面的单元格。Excel 能够判断下一个数字是 30。因此,基于此,将行复制到 Sublime 中:
10
20
30
40
然后我采用与以前相同的策略:
搜索 | 替换为 |
---|---|
(\d+) |
{"id":$1,"username":"user$1"}, |
{"id":10,"username":"user10"},
{"id":20,"username":"user20"},
{"id":30,"username":"user30"},
{"id":40,"username":"user40"},
学习
RegEx101
您可以在RegEx101中测试 RegEx 是否匹配。像 Sublime 和 IntelliJ 这样的现代编辑器会在当前窗口中动态高亮匹配项。不过,这个页面也非常适合查找错误,并通过悬停和解释部分了解实际匹配的内容和原因。
正则表达式高尔夫
然后,您可以使用RegEx Golf作为一种有趣的方式来学习 RegEx。
当然,在 dev.to 上
概括
正如您所看到的,RegEx 有很多用例可以帮助您完成手动需要花费数小时的小型和大型任务,尤其是处理大型数据集时。
鏂囩珷鏉ユ簮锛�https://dev.to/stealthmusic/boost-your-productiveness-with-regex-a-little-2384