
<img src="699.jpg" alt="" width="620" height="350" title="" align="" /> 太难了。多行汉字。多行汉字。多行汉字。 太难了。 <img src="699.jpg" alt="" width="620" height="350" title="" align="" /> 多行汉字。多行汉字。多行汉字。多行汉字。 怎么办。呵呵 1 soratadori 2016-10-12 18:52:09 +08:00 零宽断言 |
2 aploium 2016-10-12 22:59:00 +08:00 ```python # Python 3 impor re # text = 你上面的那段 result = re.sub(r"""(?<!<)([^>]*?)( )(?![^<]*>)""", "\g<1>+", text) print(result) ``` 上面这段正则把尖括号之外的空格替换为加号(+) 能力有限, 不知道怎么把第一个捕获括号变成非捕获的. 因为 python 要求 look-behind 必须是 fixed-width pattern 结果为: ``` <img src="699.jpg" alt="" width="620" height="350" title="" align="" />+++太难了。多行汉字。多行汉字。多行汉字。 ++太难了。++<img src="699.jpg" alt="" width="620" height="350" title="" align="" /> 多行汉字。多行汉字。多行汉字。多行汉字。 ++怎么办。呵呵 ``` 注意其中有一行的开头是 Tab, 不是空格, 所以没替换掉 |
3 aploium 2016-10-12 22:59:17 +08:00 为什么不支持 markdown - - |
4 sutra 2016-10-12 23:00:35 +08:00 public class Regex { public static void main(String[] args) { String s = " 太难了。多行汉字。\n 多行汉字。多行汉字。 太难了。 <img src=\"699.jpg\" alt=\"\" width=\"620\" height=\"350\" title=\"\" align=\"\" /> 太难了。多行汉字。\n 多行汉字。多行汉字。 太难了。 <img src=\"699.jpg\" alt=\"\" width=\"620\" height=\"350\" title=\"\" align=\"\" /> 多行汉字。\n 多行汉字。多行汉字。多行汉字。"; s = s.replaceAll("([ ]+)(?![^<]*>|[^<>]*</)", ""); System.out.println(s); } } |
5 sutra 2016-10-12 23:06:59 +08:00 上面这个漏了一种 case <tag></tag> package com.oxerr.sandbox; public class Regex { public static void main(String[] args) { String s = " 太难了。多行汉字。\n 多行汉字。多行汉字。 太难了。 <br /> <span> aa </span> <img src=\"699.jpg\" alt=\"\" width=\"620\" height=\"350\" title=\"\" align=\"\" /> 太难了。多行汉字。\n 多行汉字。多行汉字。 太难了。 <img src=\"699.jpg\" alt=\"\" width=\"620\" height=\"350\" title=\"\" align=\"\" /> 多行汉字。\n 多行汉字。多行汉字。多行汉字。"; s = s.replaceAll("([ ]+)(?![^<]*>)", ""); System.out.println(s); } } |
7 msg7086 2016-10-13 02:44:26 +08:00 只有我会去 capture >和<之间的内容然后把 capture 到的文字拿去抹空格么…… |
8 msg7086 2016-10-13 02:54:25 +08:00 s.gsub(/>[^<]+</) {|ss| ss.delete(' ')} |
10 nicoljiang PRO 比较严禁的处理思路大概是类似这样的吧: 第一种方案: 1. 最小匹配所有的<.*?>,把每个匹配出来的段落存到 hash 中,并把他们替换成相应 key 作为代号; 2. 去所有空格; 3. 把所有在第一步中替换成的 key 代号变回相应的<.*?>中。 第二种方案: 1. 最小匹配所有的<.*?>,并把匹配内容的空格替换成某个代号; 2. 把全文所有空格去掉; 3. 再把第一步中的代号替换回空格。 这样执行效率可能略低,但比较准确。 |
11 wlee1991 OP @nicoljiang 谢谢,后来确实也是这么做了。 |
13 msg7086 2016-10-15 08:35:44 +08:00 |