2012-09-25 76 views
0

我正在修改文件以符合新標準。 多年前我只學了一週的RegEx,但從未廣泛使用它。因此,我正在尋求一個快速解決方案。任何人都在意幫助?通過正則表達式將C1-2 R1-2更改爲C1-C2 R1-R2

--Updates--
感謝您的回覆,這裏有更多的細節問題:
以下是文件

"Qty" "Reference" "Part Name" "PCB DECAL" "Manufacturer" "Description" "Value" 
"4" "C37 C67-68" "2.2UF/10V" "C0805" "" "Capacitor" "2.2UF/10V" 
"2" "CPL1-2" "CPL" "CPL-250-200-NOVIA" "Anaren" "" "1P510"  
"15" "M1-15" "HOLE100" "HOLE100_180" "" "" "" 
"4" "L1-2 L5 L7" "IND" "L0603" "" "MOLDED INDUCTOR, 0.5" PIN SPACING" "2.2nH" 
"9" "R2 R8 R12 R34-35" "R" "R0603" "" "" "0" 

基本上我需要檢測所有「的快照 - 「在第2欄中,後面跟着一個數字,並插入在單詞開頭的字母之間。

關於該語言,我實際上使用Notepad ++,認爲如果涉及到這一點,可以通過移植到其他平臺(如SED)租用相同的表達式。

+1

請,提供更多的細節。 C和R是唯一可能的字母嗎? 1和2是唯一可能的數字,並始終在同一個地方? –

+0

另外,您使用哪種語言的正則表達式? –

回答

0
([A-Za-z]){1,}([0-9]{1,})-([0-9]{1,}) 

正則表達式匹配:

  • 字符A到Z,a到z一次或多次(第一捕捉),接着
  • 字符0至9的一個或更多次(第二捕獲)中,隨後
  • 字符 - ,隨後
  • 字符0至9的一個或更多次(第三捕獲)

代用圖案是這樣的:

$1$2-$1$3 

實施例中PHP預浸料:

$output = preg_replace('/([A-Za-z]){1,}([0-9]{1,})-([0-9]{1,})/', '$1$2-$1$3', $input); 
0

如果您提供了更具體的示例以及您正在使用的語言/實現方式,這將有所幫助。

考慮您的問題從字面上看,雖然...

s/(C|R)(\d)-(\d)/\1\2-\1\3/g 

編輯:

在評論的光,你要替換

\b(C|R)(\d+)-(\d+) 

\1\2-\1\3 
+0

如果你真的想要去字面上,'s/C1-2 R1-2/C1-C2 R1-R2/g' :) –

+0

請參閱編輯更新的解決方案,這被公認是由別人給出的,但這是一個微不足道的問題無論如何。 –

0

你不得不做這樣的事情(Python的例子):

>>> import re 
>>> test = 'C1-2 R1-2' 
>>> re.sub(r'([A-Z])(\d+)-(\d+)', r'\1\2-\1\3', test) 
'C1-C2 R1-R2' 

基本上,你需要\1\2-\1\3更換([A-Z])(\d+)-(\d+)