[英]How to find and replace instances with 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
....
我正在尝试执行的查找和替换操作,将前两个新行“ \\ n”替换为选项卡“ \\ t”,而将第三个“ \\ n”保持原样。
我要做的第一件事是用“ \\ t”替换所有“ \\ n”,这很容易。 之后,我想用“ \\ n”替换第三个“ \\ t”。 我将如何使用正则表达式呢?
对于EditPadPro,请将其粘贴到“ Search
框中
([A-Za-z /]+)
([A-Za-z0-9_-]+)
(.*)
将此粘贴到“ Replace
框中
\1 \2 \3
那应该做到的。 基本上,您可以在EditPadPro中使用Ctrl + Enter和Ctrl + Tab添加回车符和制表符。
我必须在问题中的文本中添加回车符,因为它缺少我认为的最后一行。 其他所有数据则占三倍。
好了,这是完全符合您需要的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);
?>
OUTPUT:
>php -q regex.php
Cordless 9B12071R CHARGER, 3.6V,LI-ION
Cordless 9B12073R CHARGER,NI-CD,FRAMER
这是正则表达式作业还是您可以依靠行号?
$ perl -nE 'chomp; print $_, $.%3? "\t": "\n"' file
编辑 (评论后)
如果必须在编辑器中执行此操作,则可以在vim中运行:
%s/\(.\+\)\n\(\C[A-Z0-9-]\+\)\n\(.\+\)/\1^I\2^I\3/
此处重要的一点是假设完全由AZ
, 0-9
和-
组成的线构成零件号。 ^I
是一个标签,您键入tab,然后vim打印^I
(希望您的编辑者有这么多的类固醇!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.