通过正则表达式将C1-2 R1-2变为C1-C2 R1-R2

时间:2012-09-25 17:40:38

标签: regex

我正在修改文件以符合新标准。 我很多年前才学习RegEx一周,但从未广泛使用它。因此,我在这里寻求快速解决方案。有人帮忙吗?

- 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)可以租用相同的表达式。

3 个答案:

答案 0 :(得分:0)

如果你提供了一个更具体的例子,以及你正在使用的语言/实现,那将会有所帮助。

从字面上理解你的问题,但是......

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

修改

根据评论,您想要替换

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

\1\2-\1\3

答案 1 :(得分: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'

基本上,您需要将([A-Z])(\d+)-(\d+)替换为\1\2-\1\3

答案 2 :(得分:0)

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

正则表达式匹配:

  • 字符A到Z,a到z一次或多次(第一次捕获),然后是
  • 字符0到9一次或多次(第二次捕获),然后是
  • 角色 - ,然后是
  • 字符0到9一次或多次(第三次捕获)

替换模式是这样的:

$1$2-$1$3

PHP preg中的示例:

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