我在iPhone上通过RegKit使用正则表达式lib icucore 替换大字符串中的模式。
我正在寻找的模式看起来像这样
| hello world (P1)|
我将此模式与以下正则表达式匹配
\|((\w*|.| )+)\((\w\d+)\)\|
当找到匹配项时,这会将输入字符串转换为3组,其中组1(字符串)和组3(括号中的字符串)是我感兴趣的。
我正在将这些格式化的字符串转换为html链接,因此上面的内容将转换为
<a href="P1">Hello world </a>
我的问题是第三组中的尾随空格。当链接突出显示并加下划线时,结果显示行超出打印字符。
虽然我知道我可以提取所有匹配并手动处理它们,但使用icu lib的搜索和替换功能是一个更清洁的解决方案,我宁愿不这样做。
非常感谢
答案 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断言来确保捕获组以非空格字符结尾。