用于正则表达式查找/替换的用例

时间:2008-09-09 13:30:39

标签: regex editor

我最近和一位同事讨论了编辑。他使用一个不太受欢迎的编辑器而我使用另一个(我不会说哪些是不相关的,我想避免编辑火焰战)。我说我不喜欢他的编辑器,因为它不会让你用正则表达式找到/替换。

他说他从来不想这样做,这是令人惊讶的,因为这是我发现自己一直在做的事情。然而,在我的头脑中,我无法想出一两个以上的例子。这里的任何人都可以提供一些他们在编辑器中发现正则表达式查找/替换有用的时间示例吗?以下是我从那时起想出的事情,作为我实际必须做的事情的例子:

  1. 从文件中的每一行中删除一行的开头,如下所示:
    Line 25634 :
    Line 632157 :

  2. 使用标准标题的几十个文件,每个文件略有不同,并同时从所有文件中删除前19行。

  3. 将MySQL select语句的结果管道化为文本文件,然后删除所有格式化垃圾并将其重新格式化为Python字典,以便在简单的脚本中使用。

  4. 在没有转义逗号的CSV文件中,用大写字母A替换每行第8列的第一个字符。

  5. 给出一堆GDB堆栈跟踪,其中的行如
    #3 0x080a6d61 in _mvl_set_req_done (req=0x82624a4, result=27158) at ../../mvl/src/mvl_serv.c:850
    从功能名称以外的每一行中删除所有内容。

  6. 还有其他人有任何现实生活中的例子吗?下次出现这个问题时,我想更好地列出为什么这个功能有用的好例子。

10 个答案:

答案 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

我的意思是做以下事情:

  1. 将光标置于第一行
  2. 启动键盘宏录制
  3. 修改第一行
  4. 将光标置于下一行
  5. 停止记录。
  6. 现在修改下一行所需的只是重复宏。

    我可以忍受对正则表达式的支持,但没有匿名键盘宏就无法生存。