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

从正则表达式匹配组中删除尾随空格

  •  1
  • Jonathan  · 技术社区  · 14 年前

    我在iPhone上通过RegKit使用正则表达式lib icucore 替换大字符串中的图案。

    我要找的图案像这样

    | hello world (P1)|
    

    \|((\w*|.| )+)\((\w\d+)\)\|
    

    <a href="P1">Hello world </a>
    

    我的问题是第三组中的尾随空格。当链接高亮显示并加下划线时,结果是行超出了打印的字符。

    一如既往,非常感谢

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mike Ryan    14 年前

    下面的表达式是否可以作为替代正则表达式使用?

    \|((\w*|.| )+)\s+\((\w\d+)\)\| 插入额外的\s+会将空格拉到第一个分组之外。

    不过,举个例子;正则表达式,我不知道你为什么不这样做:

    \|(.+)\s+\((\w\d+)\)\|

    同样的效果。但是,您原来的正则表达式和我的更简单的正则表达式都会失败,但是:

    | hello world (P1)| and on the same line | howdy world (P1)|

    把它卷成一场比赛。

        2
  •  2
  •   Tim Pietzcker    14 年前
    \|\s*([\w ,.-]+)\s+\((\w\d+)\)\|
    

    将把尾随空格放在捕获组之外。当然,只有在始终存在的情况下,这才会起作用 一个空间。你能保证吗?

    如果没有,使用

    \|\s*([\w ,.-]+(?<!\s))\s*\((\w\d+)\)\|
    

    这使用lookback断言来确保捕获组以非空格字符结束。