7

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

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

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

  2. 取几十个带有标准标题的文件,每个文件略有不同,并一次从所有文件中删除前 19 行。

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

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

  5. 给定一堆 GDB 堆栈跟踪,其中包括
    #3 0x080a6d61 in _mvl_set_req_done (req=0x82624a4, result=27158) at ../../mvl/src/mvl_serv.c:850
    除函数名称之外的每一行中的所有内容。

其他人有任何现实生活中的例子吗?下次出现这种情况时,我想更充分地准备列出为什么这个功能有用的好例子。

4

10 回答 10

2

就在上周,我使用正则表达式查找/替换将 CSV 文件转换为 XML 文件。

真的很简单,只需切掉每个字段(幸运的是它没有任何转义的逗号),然后用适当的标签代替逗号将其推回。

于 2008-09-09T13:35:49.650 回答
2

正则表达式使使用单词边界替换整个单词变得容易。

(\b\w+\b)

因此,您可以替换文件中不需要的单词,而不会干扰像斯肯索普这样的单词

于 2008-09-09T13:41:11.540 回答
2

昨天我为 Oracle 表创建了一个创建表语句,并使用 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() (和其他方法),但这对我来说很方便。我实际上将它用于类似领域的三四次方法调用转换。

于 2008-11-14T00:17:40.397 回答
1

我喜欢使用正则表达式来重新格式化这样的项目列表:

int item1
double item2

public void item1(int item1){
}
public void item2(double item2){
}

这可以节省大量时间。

于 2008-09-09T13:45:21.547 回答
1

当有人向我发送列中的患者访问号码列表(例如 100-200)并且我需要它们以“0000000444”、“000000004445”格式时,我一直使用它。为我创造奇迹!

我还用它来提取电子邮件中的电子邮件地址。我经常发送群组电子邮件,所有退回的退货都会在一封电子邮件中返回。因此,我正则表达式将它们全部拉出,然后将它们放入字符串 var 中以从数据库中删除。

我什至写了一个小对话框程序来将正则表达式应用于我的剪贴板。它抓取内容并应用正则表达式,然后将其加载回剪贴板。

于 2008-09-09T14:34:38.480 回答
1

我在 Web 开发中一直使用它的一件事是剥离其 HTML 标记的一些文本。为了安全起见,或者为了显示新闻文章的预览,可能需要执行此操作来清理用户输入。例如,如果您的文章包含大量用于格式化的 HTML 标签,您不能只执行 LEFT(article_text,100) + '...' (加上“阅读更多”链接)并将其呈现在页面上通过拆分 HTML 标签来破坏页面的风险。

此外,我不得不在链接到不再存在的图像的数据库记录中去除 img 标签。我们不要忘记 Web 表单验证。如果您想让用户在 Web 表单中输入正确的电子邮件地址(从语法上讲),这是彻底检查它的唯一方法。

于 2008-11-14T00:05:07.550 回答
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.";
于 2009-09-03T17:37:19.750 回答
0

我同意你对第 3、4 和 5 点的看法,不一定同意第12

在某些情况下,使用匿名键盘宏更容易实现12 。

我的意思是执行以下操作:

  1. 将光标定位在第一行
  2. 开始键盘宏录制
  3. 修改第一行
  4. 将光标定位在下一行
  5. 停止记录。

现在修改下一行所需要做的就是重复宏。

我可以不支持正则表达式,但不能不支持匿名键盘宏。

于 2008-09-18T01:57:04.530 回答
0

每当我尝试替换跨多行的值时,Regex 都非常方便。或者当我想用包含换行符的东西替换一个值时。

我也喜欢你可以匹配正则表达式中的内容,而不是使用 $# 语法替换完整匹配来输出你想要维护的匹配部分。

于 2008-09-12T18:57:31.910 回答
0

我对任何编辑器做的第一件事就是试图找出它是正则表达式的奇怪之处。我用它所有的时间。没什么特别疯狂的,但是当您必须在不同类型的文本之间复制/粘贴内容时,它会很方便 - SQL <-> PHP 是我最常做的一种 - 而且您不想放屁进行相同的更改 500次。

于 2008-09-09T13:46:39.437 回答