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

时间:2010-06-29 17:46:38

标签: iphone regex icu

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

我正在寻找的模式看起来像这样

| hello world (P1)|

我将此模式与以下正则表达式匹配

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

当找到匹配项时,这会将输入字符串转换为3组,其中组1(字符串)和组3(括号中的字符串)是我感兴趣的。

我正在将这些格式化的字符串转换为html链接,因此上面的内容将转换为

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

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

虽然我知道我可以提取所有匹配并手动处理它们,但使用icu lib的搜索和替换功能是一个更清洁的解决方案,我宁愿不这样做。

非常感谢

2 个答案:

答案 0 :(得分:2)

以下是否可以作为替代正则表达式?

\|((\w*|.| )+)\s+\((\w\d+)\)\|插入额外的\ s +时,将空间拉出第一组。

虽然,举个例子&amp;正则表达式,我不确定你为什么不这样做:

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

哪个会产生同样的效果。但是,你的原始正则表达式和我更简单的正则表达式都会失败,但是:

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

它会把它卷成1场比赛。

答案 1 :(得分:2)

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

会将尾随空格放在捕获组之外。这当然只有在 空格时才有效。你能保证吗?

如果没有,请使用

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

这使用了一个lookbehind断言来确保捕获组以非空格字符结尾。