[英]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.