【发布时间】:2017-12-07 16:02:03
【问题描述】:
我正在尝试将某个标签内的括号替换为该标签的外部,即,如果在标签之后有一个左括号,或者在结束标签之前有一个右括号。示例:
<italic>(When a parenthetical sentence stands on its own)</italic>
<italic>(When a parenthetical sentence stands on its own</italic>
<italic>When a parenthetical sentence stands on its own)</italic>
这些行应该在替换之后:
(<italic>When a parenthetical sentence stands on its own</italic>)
(<italic>When a parenthetical sentence stands on its own</italic>
<italic>When a parenthetical sentence stands on its own</italic>)
但是,下面三个字符串应该保持不变。
<italic>(When) a parenthetical sentence stands on its own</italic>
<italic>When a parenthetical sentence stands on its (own)</italic>
<italic>When a parenthetical sentence stands (on) its own</italic>
但以下字符串:
<italic>((When) a parenthetical sentence stands on its own</italic>
<italic>((When) a parenthetical sentence stands on its own)</italic>
<italic>(When) a parenthetical sentence stands on its own)</italic>
<italic>When a parenthetical sentence stands on its (own))</italic>
<italic>(When a parenthetical sentence stands on its (own)</italic>
应该在替换之后:
(<italic>(When) a parenthetical sentence stands on its own</italic>
(<italic>(When) a parenthetical sentence stands on its own</italic>)
<italic>(When) a parenthetical sentence stands on its own</italic>)
<italic>When a parenthetical sentence stands on its (own)</italic>)
(<italic>When a parenthetical sentence stands on its (own)</italic>
<italic>...</italic> 标签内可能有嵌套标签,并且一行可以包含多个<italic>...</italic> 字符串。
此外,如果<italic>...</italic> 内有嵌套标签<inline-formula>...</inline-formula>,则应忽略这些标签。
我可以使用正则表达式吗?如果不是,我还能通过什么其他方式做到这一点?
我的方法是这样的(我仍然不确定它是否涵盖了所有可能的情况):
第一步:<italic>( ---> (<italic>
查找<italic>( 如果标签后面没有匹配的括号对,则立即没有结束标签
匹配只允许在一行内。
查找内容:(<(italic)>)(?!(\((?>(?:(?![()\r\n]).)++|(?3))*+\))(?!</$2\b))(\()
替换为:$4$1
第二步:)</italic> ---> </italic>)
如果标签前面没有匹配的括号对,则查找)</italic>
匹配只允许在一行内。
(\))(?<!(?<!<(italic)>)(\((?>(?:(?![()\r\n]).)++|(?3))*+\)))(</2\b>)
【问题讨论】:
-
你试过什么?请给我们一些代码。
-
@nilsK 检查更新的问题
-
(<italic>(When a parenthetical sentence stands on its own)</italic>)怎么样。我们是否因为外面已经有括号而跳过替换? -
@Flater
(<italic>(When a parenthetical sentence stands on its own)</italic>)应替换为((<italic>When a parenthetical sentence stands on its own</italic>)) -
在走这条路之前请务必阅读stackoverflow.com/questions/1732348/…。