这个虚线模式的正则表达式

时间:2014-01-07 03:36:01

标签: regex

是否有人建议使用正则表达式来操纵结束中的行:

,04-721-0G-00033-AU

并将该字符串转换为:

,04,721,0G,00033,AU

(将字符串中最后一个逗号后的所有短划线替换为逗号)

请记住,字符串的前面部分可能有短划线和逗号,所以我肯定知道我想要操作的部分是一个以最后一个逗号开头的字符串行以EOL 结尾,并具有,XX-XXX-XX-XXXXX-XX

的结构

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:3)

匹配:,(?=[^,]*$)(\w{2})-(\w{3})-(\w{2})-(\w{5})-(\w{2})$
替换为:,$1,$2,$3,$4,$5

工作原理:

  • ,(?=[^,]*$)选择该行的最后一个,(字面意思是: ,除了其他,之外只有其他任何内容,直到结束线)。
  • 之后,我们会尝试将您的 XX-XXX-XX-XXXXX-XX (\w{2})-(\w{3})-(\w{2})-(\w{5})-(\w{2})
  • 通过匹配$
  • 确保已到达该行的结尾

然后你只需重写:

  • ,
  • 每个 XX 组以-分隔。

答案 1 :(得分:1)

这种模式(test replace)会做你喜欢的吗?

-(?=[^,]{1,15}$)

替换为,

检查连字符,如果有1-15个字符从左到尾没有使用look ahead的逗号,如果是,则替换为逗号。

由于没有指定语言,用于多行替换,您可能希望为多行添加m-modifier,为JS添加{{3} } 全球g-modifier)。