如何使用正则表达式查找和替换实例

时间:2011-03-17 19:29:29

标签: regex

当我从pdf复制文本时,我正在尝试重新格式化一些播放效果不佳的数据。

Cordless
9B12071R
CHARGER, 3.6V,LI-ION
Cordless
9B12073R
CHARGER,NI-CD,FRAMER
Framing / Sheathing tools
F28WW
WIRE COLLATED FRAMIN
Framing / Sheathing tools
N89C-1
COIL FRAMING NAILR
Framing / Sheathing tools
N80CB-HQ

我希望它的格式如下:

Cordless      9B12071R     CHARGER, 3.6V,LI-ION
Cordless      9B12073R     CHARGER,NI-CD,FRAMER
....

我正在尝试做的是使用标签“\ t”取代前两个新行“\ n”,并将第三个“\ n”替换为“\ n”。

我做的第一件事是用“\ t”替换所有“\ n”,这很容易。之后,我想用“\ n”替换第三个“\ t”。我如何使用正则表达式?

3 个答案:

答案 0 :(得分:3)

对于EditPadPro,将其粘贴到Search

([A-Za-z /]+)
([A-Za-z0-9_-]+)
(.*)

将其粘贴到Replace

\1  \2  \3

那应该这样做。基本上,您可以在EditPadPro中使用 Ctrl + Enter Ctrl + Tab 添加回车符和制表符。

我不得不在问题中为你的文字添加一个回车,因为它错过了我认为的最后一行。所有其他人都是三倍的数据。

答案 1 :(得分:1)

好的,这里是你想要的 完全 的php代码:

<?php
   $s = "Cordless
   9B12071R
   CHARGER, 3.6V,LI-ION
   Cordless
   9B12073R
   CHARGER,NI-CD,FRAMER";

   $p = '/(Cordless.*?)\\n(.+?)\\n(CHARGER.+?)(\\n|$)/s';
   $r = '\\1' . "\t" . '\\2' . "\t" . '\\3' . "\n";

   echo preg_replace($p, $r, $s);
?>

<强>输出:

>php -q regex.php
Cordless        9B12071R        CHARGER, 3.6V,LI-ION
Cordless        9B12073R        CHARGER,NI-CD,FRAMER

答案 2 :(得分:0)

这是一个正则表达式的工作还是你可以依赖行号?

$ perl -nE 'chomp; print $_, $.%3? "\t": "\n"' file

编辑(评论后)

如果你必须在编辑器中执行此操作,那么这适用于vim:

%s/\(.\+\)\n\(\C[A-Z0-9-]\+\)\n\(.\+\)/\1^I\2^I\3/

这里重要的一点是假设一条完全由A-Z0-9-组成的行构成了一个部件号。 ^I是一个标签,您输入标签并vim打印^I。 (我希望你的编辑有这么多的类固醇!)