代码之家  ›  专栏  ›  技术社区  ›  LDAsh

带有通配符和斜线的正则表达式?

  •  2
  • LDAsh  · 技术社区  · 6 年前

    我将wingrep和notepad++(windows)与其他一些使用regex的软件一起使用。 我也一直试图通过这个网站来解决这个问题: http://www.regexlab.com/wild2regex

    我正在处理的文本示例如下:


    newmtl models\cat1\item1
        illum 1
        Kd 1 1 1
        map_Kd models\cat1\item1.dds
    
    newmtl models\cat1\item2
        illum 1
        Kd 1 1 1
        map_Kd models\cat1\item2.dds
    
    newmtl models\cat1\item3
        illum 1
        Kd 1 1 1
        map_Kd models\cat1\item3.dds
    

    我想将标题行“newmtl”上的后斜杠改为前斜杠,而不影响较低的“map_kd”行。 “models cat item”可以是任何东西,这些都是带有任何字母或数字的通配符,可能带有下划线和感叹号。 这对我来说非常困难,因为它不仅涉及返回多个通配符,而且还涉及特殊字符。

    任何帮助都将不胜感激!:)

    2 回复  |  直到 6 年前
        1
  •  1
  •   sln    6 年前

    如果使用np++这应该可以。

    发现 (?m)(?:^\h*newmtl|\G(?!^))[^\\\r\n]*\K\\
    替换 /

    http://rubular.com/r/IG0yMflzIa

    可读版本

     (?m)                    # Multi-line mode
     (?:                     # ------------
          ^ \h*                   # BOL and optional horizontal whitespace
          newmtl  
       |                        # or,
          \G                      # Anchor, start this match where last left off
          (?! ^ )                 # Except if its BOL
     )                       # ------------
     [^\\\r\n]*              # Anything but \ or CRLF, stay on this line
     \K                      # Ignore all that matched up to here
     \\                      # The only thing that is left, will be replaced
    
        2
  •  2
  •   Leo Aso    6 年前

    看起来很简单。在notepad++中,只需运行

    找到什么: (newmtl .+?)\\(.+?)\\(.+?)

    替换为: $1/$2/$3