我最近和一位同事讨论了编辑。他使用一个不太受欢迎的编辑器而我使用另一个(我不会说哪些是不相关的,我想避免编辑火焰战)。我说我不喜欢他的编辑器,因为它不会让你用正则表达式找到/替换。
他说他从来不想这样做,这是令人惊讶的,因为这是我发现自己一直在做的事情。然而,在我的头脑中,我无法想出一两个以上的例子。这里的任何人都可以提供一些他们在编辑器中发现正则表达式查找/替换有用的时间示例吗?以下是我从那时起想出的事情,作为我实际必须做的事情的例子:
从文件中的每一行中删除一行的开头,如下所示:
Line 25634 :
Line 632157 :
使用标准标题的几十个文件,每个文件略有不同,并同时从所有文件中删除前19行。
将MySQL select语句的结果管道化为文本文件,然后删除所有格式化垃圾并将其重新格式化为Python字典,以便在简单的脚本中使用。
在没有转义逗号的CSV文件中,用大写字母A替换每行第8列的第一个字符。
给出一堆GDB堆栈跟踪,其中的行如
#3 0x080a6d61 in _mvl_set_req_done (req=0x82624a4, result=27158) at ../../mvl/src/mvl_serv.c:850
从功能名称以外的每一行中删除所有内容。
还有其他人有任何现实生活中的例子吗?下次出现这个问题时,我想更好地列出为什么这个功能有用的好例子。
答案 0 :(得分:2)
就在上周,我使用regex find / replace将CSV文件转换为XML文件。
足够简单,只需要切断每个字段(幸运的是它没有任何转义的逗号)并用相应的标签代替逗号将其推回去。
答案 1 :(得分:2)
正则表达式可以轻松地使用单词边界替换整个单词。
(\b\w+\b)
因此,您可以替换文件中不需要的字词而不会打扰像 Scunthorpe
这样的字词答案 2 :(得分:2)
昨天我采用了我为Oracle表创建的create table语句,并使用JDBC和PreparedStatements将字段转换为setString()方法调用。表的字段名称已映射到我的类属性,因此正则表达式搜索和替换是最合适的。
创建表格文字:
...
field_1 VARCHAR2(100) NULL,
field_2 VARCHAR2(10) NULL,
field_3 NUMBER(8) NULL,
field_4 VARCHAR2(100) NULL,
....
我的正则表达式搜索:
/([a-z_])+ .*?,?/
我的替换:
pstmt.setString(1, \1);
结果:
...
pstmt.setString(1, field_1);
pstmt.setString(1, field_2);
pstmt.setString(1, field_3);
pstmt.setString(1, field_4);
....
然后我通过手动设置每个调用的位置int,并在必要时将方法更改为setInt()(和其他),但这对我来说非常方便。我实际上使用了三到四次类似字段来进行方法调用转换。
答案 3 :(得分:1)
我喜欢使用regexp来重新格式化这样的项目列表:
int item1
double item2
到
public void item1(int item1){
}
public void item2(double item2){
}
这可以节省大量时间。
答案 4 :(得分:1)
我总是在有人向我发送一个患者访问号码列表(例如100-200)时使用它,我需要它们以'0000000444','000000004445'格式。为我创造奇迹!
我还用它来提取电子邮件中的电子邮件地址。我经常发送群组电子邮件,所有退回的回复都会在一封电子邮件中发回。所以,我正则表达式将它们全部拉出来然后将它们放入一个字符串var中以从数据库中删除。
我甚至写了一个小对话框程序来将regex应用到我的剪贴板。它抓取内容应用正则表达式,然后将其加载回剪贴板。
答案 5 :(得分:1)
我在Web开发中一直使用它的一件事是剥离其HTML标签的一些文本。可能需要执行此操作来清理用户输入以确保安全性,或者显示新闻文章的预览。例如,如果您有一篇包含大量HTML标签的文章进行格式化,那么您不能只执行LEFT(article_text,100)+'...'(加上“阅读更多”链接)并在页面上进行渲染通过拆分HTML标记来破坏页面的风险。
另外,我不得不在链接到不再存在的图像的数据库记录中剥离img标记。让我们不要忘记Web表单验证。如果您想让用户在网络表单中输入正确的电子邮件地址(从语法上讲),这是彻底检查它的唯一方法。
答案 6 :(得分:1)
我刚刚将一个长字符序列粘贴到一个字符串文字中,现在我想将它分解为一个较短字符串文字的串联,因此它不会换行。我也希望它具有可读性,所以我想在空格之后才能打破它。我选择整个字符串(减去引号)并使用此正则表达式进行仅选择替换 - 所有:
/.{20,60} /
......而且这个替代品:
/$0"¶ + "/
...其中,pilcrow是一个实际的换行符,并且空格的数量因事件而异。结果:
String s = "I recently discussed editors with a co-worker. He uses one "
+ "of the less popular editors and I use another (I won't say "
+ "which ones since it's not relevant and I want to avoid an "
+ "editor flame war). I was saying that I didn't like his "
+ "editor as much because it doesn't let you do find/replace "
+ "with regular expressions.";
答案 7 :(得分:0)
我对任何一位编辑所做的第一件事就是试着找出它的正则表达式。我用它所有的时间。没有什么可以疯狂的,但是当你必须在不同类型的文本之间复制/粘贴东西时它很方便 - SQL< - > PHP是我经常做的 - 而且你不想放弃做同样的改变500次。
答案 8 :(得分:0)
当我试图替换跨越多行的值时,正则表达式非常方便。或者当我想用包含换行符的内容替换值时。
我也喜欢你可以匹配正则表达式中的东西而不是使用$#语法替换完整匹配来输出你想要维护的匹配部分。
答案 9 :(得分:0)
我同意你的观点 3 , 4 和 5 但不一定是 1 和<强> 2 强>
在某些情况下,使用匿名键盘宏更容易实现 1 和 2 。
我的意思是做以下事情:
现在修改下一行所需的只是重复宏。
我可以忍受对正则表达式的支持,但没有匿名键盘宏就无法生存。