掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1159|回复: 25

[求助] 正则表达式替换问题:如何给HTML正文斜杠加上标签

[复制链接]
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

    发表于 2019-1-16 16:00:34 | 显示全部楼层 |阅读模式
    本帖最后由 atauzki 于 2019-1-16 19:03 编辑 & a! N( X5 e$ ^' n1 n5 r4 N" e) d

    ; Z9 J3 S5 J- M8 a如何将类似
    1. <script type="text/javascript"></script><span class="foo">a foo/bar/baz/...<a href="entry://localhost/vbiauedbvie0">aaa/bbb/ccc/ddd</a>ee/fff/gg</span>
    复制代码
    2 C6 h- K0 a+ V0 m- j) w( i2 T, {
    这类字符串替换成
    1. <script type="text/javascript"></script><span class="foo">a foo<span class="sep">/</span>bar<span class="sep">/</span>baz<span class="sep">/</span>...<a href="entry://localhost/vbiauedbvie0">aaa<span class="sep">/</span>bbb<span class="sep">/</span>ccc<span class="sep">/</span>ddd</a>ee<span class="sep">/</span>fff<span class="sep">/</span>gg</span>
    复制代码

    4 G0 c1 H1 o5 @& A$ A: F要替换的文本中标签可能存在url,嵌套任意,正文内容中单词数量可变。现在要求保持标签内部斜杠不变,正文里斜杠被<span class="sep">标签包围。
    . w' C* e( C- ~* S- d
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-17 10:59:38 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-17 13:51 编辑 - l4 V/ i& L. F- X0 S. X; I. L
    jonah_w 发表于 2019-1-16 23:32& A( j) o7 H& W0 z) P
    可能编辑器对正则的支持不尽相同,我这边是可以的。

    2 J# o: |2 `/ {8 ?7 n; e- j确实如此。安卓quickedit测试成功。这个编辑器的正则引擎就是java的自带正则库,emeditor默认用的boost. p+ \; X0 a' P" ?4 A
    UPADTE:(?<=>)([^<>]+?)(\/)([^<>]+?)(?=<)可以替换。转义符不能随便用。  Z" @2 @0 r7 ^  c9 r3 G

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2019-1-23 10:04
  • 签到天数: 122 天

    [LV.7]常住居民III

    发表于 2019-1-16 18:08:21 | 显示全部楼层
    可以先缩小至需要替换的范围,然后在选中范围内进一步作替换。
    2 Z/ R/ @8 S6 L" I  U9 c! a$ U: T+ t7 ^" L9 K2 d2 J8 z
    EmEditor里可以这么做:
    2 }# h3 s+ {  r( J<a href="..."></a>内的斜杠
    * f$ T- Z7 m% N7 }7 Z1. 查找全部:
    ) W8 O# c( _" g- b
    1. (?<=">)([^<]*?)(?=</a>)
    复制代码
    2. 勾选仅限于选区内 (in the selection only),再将"/"替换成"<span class="sep">/</span>"1 D1 @, p4 C: ^* N

      ]6 Y! ]0 w0 R9 g1 N; M% x4 Y$ V
    / G9 l: A' B3 j8 N2 j% K+ C3 ^# p/ F紧接在<span class="foo">后面的斜杠3 r: |6 u$ d! e$ [3 C+ X. Q2 Q
    1. 查找全部
    4 R. s% {! v- C9 X
    1. (?<=<span class="foo">)([^<]*?)(?=<)
    复制代码
    2. 勾选仅限于选区内 (in the selection only),再将"/"替换成"<span class="sep">/</span>"

    评分

    2

    查看全部评分

  • TA的每日心情
    开心
    2019-1-18 23:55
  • 签到天数: 230 天

    [LV.7]常住居民III

    发表于 2019-1-16 16:20:11 来自手机 | 显示全部楼层
    先替换标签内容,再换正文,最后把标签内容恢复回去,应该可以
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 16:44:34 | 显示全部楼层
    你敢保证所有形式都这样吗?如果是的话,不就是把“/”替换成了“<span class="sep">/</span>”吗 正常替换不就行了吗
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 16:51:40 | 显示全部楼层
    dothu 发表于 2019-1-16 16:447 |8 n' ~/ J4 B+ l0 L8 R
    你敢保证所有形式都这样吗?如果是的话,不就是把“/”替换成了“/”吗 正常替换不就行了吗 ...

    2 B% p% m' u/ e7 R  [( ^要排除掉html标签内的斜杠,以及<a href=...>的斜杠
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 17:15:53 | 显示全部楼层
    不用管标签内的斜杠,[^>]就连同斜杠一起排除了
    " F6 C4 m( i8 u2 ]. [) ]/ b6 V
    ( c4 y& L/ d. q0 K查找
    8 |% S% B( @# x7 q1 K5 X/ n$ C% w
    1. (<a href="entry://[^>]*?>\w+?)(/)(\w+?)(/)(\w+?)(/)(\w+?</a>)
    复制代码
    2 H: [6 E/ Q9 V4 S  m
    替换# S2 Y8 @, B: I8 U$ U- I( z
    1. \1<span class="sep">\2</span>\3<span class="sep">\4</span>\5<span class="sep">\6</span>\7
    复制代码
    5 W) ~+ Y; Q! O/ p: i
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 17:23:03 | 显示全部楼层
    dothu 发表于 2019-1-16 17:15
    # p8 l& Y! `' ^1 k8 J1 B; ]3 V& M不用管标签内的斜杠,[^>]就连同斜杠一起排除了5 D% ^$ `3 x( S, g5 M; e3 n
    5 ?& P) `5 x$ |6 w6 f- C. H1 {
    查找
    6 K2 H! {. W8 N9 z( j
    如果标签内斜杠数目有变化呢
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 17:25:37 | 显示全部楼层
    atauzki 发表于 2019-1-16 17:234 p/ Q. ^1 r% c7 O6 A2 N6 N/ k& j, B+ I
    如果标签内斜杠数目有变化呢

    ' i/ i+ U7 B9 x) f* u' h你是说标签内包含的aaa|bbb|ccc有变化是吧,对啊,所以刚才问你是不是严格准守这个格式啊
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 17:43:57 | 显示全部楼层
    dothu 发表于 2019-1-16 17:25
    # s9 L0 V5 U$ q( v6 U* A你是说标签内包含的aaa|bbb|ccc有变化是吧,对啊,所以刚才问你是不是严格准守这个格式啊 ...

    0 G+ w$ w  T5 f/ V+ p# k不严格遵守啊,我刚才编辑了一下1楼的问题。基本上就是最一般的情况。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 18:17:20 | 显示全部楼层
    atauzki 发表于 2019-1-16 17:435 V; `0 D; \0 ~# O1 z
    不严格遵守啊,我刚才编辑了一下1楼的问题。基本上就是最一般的情况。
    & X4 X# f1 q/ S- }5 [8 |; [
    你这种情况能一次匹配,但不能替换,正则没法替换计数的匹配。只能采用多次匹配替换,或者脚本。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 18:20:12 | 显示全部楼层
    嗯,9楼方法简单,完全可行,我还没注意EmEditor有这么个功能,这软件果然是个好东西。。。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-16 19:00:58 | 显示全部楼层
    供参考:$ G) m% x' e* D0 e, A
    + W8 X& O( n& E* X
    1. (?<=\>)([^<>]+?)(\/)([^<>]+?)(?=<)
    复制代码

    / ]+ L( L& r8 o' X2 b! J' f) P
    ' _& {% D4 d' P! q- @% F  E替换为:: m9 j/ V) p3 |. z$ A$ h

    + ?  M, ?" f0 w# J- J
    1. \1<span class="sep">/</span>\3
    复制代码
    4 u$ n7 T( B; h. m" U; R

    ( }6 a' H6 N/ _- G# K. M注:需多次替换
  • TA的每日心情
    奋斗
    2019-10-13 07:34
  • 签到天数: 209 天

    [LV.7]常住居民III

    发表于 2019-1-16 19:04:45 | 显示全部楼层
    应该一步就可以替换到位:搜索>……<之间的/替换即可,其中>……<是指以>开头,以<结尾

    评分

    1

    查看全部评分

  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 20:15:33 | 显示全部楼层
    VimVim 发表于 2019-1-16 19:04
    ; b7 @- N# W) I! [应该一步就可以替换到位:搜索>…………开头,以
    $ P3 J& E# G5 G  u7 J1 o: d$ J
    这个我想过,但从我经验上看是很容易误伤。其实我3楼就是这个意思... 0_0!

    点评

    3楼的方法应该会误伤诸如此类的替换吧:<a href="entry://localhost/vbiauedbvie0">  发表于 2019-1-16 20:17
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 20:20:18 | 显示全部楼层
    不,我的意思是你那个,> ... <, 当然不可能是纯的直接替换...

    该用户从未签到

    发表于 2019-1-16 20:24:57 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-16 20:50 编辑
    $ e1 u! G8 ~8 Y. A1 J' V+ {0 D  K. ~7 ]3 X9 n
    个人认为至少需要两步:(在Emeditor环境中通过): q: `8 q" c% K, z1 T' J) P$ O
    1.ctrl+F弹出页面输入 >[^<].*?/.*?< 点击 选中所有,再在同一界面下点击 替换! x) E" |. _9 F1 K3 j2 f' V
    2.取消正则模式,点击 仅限选区内后输入 查找 / 替换为 <span class="sep">/</span> 再点击全部替换,收功。
    ' p0 S5 {  {  S. q& X附件为图片,详细过程' i! ~( Z. }4 {. ^! j. o3 _4 P
    基本思想是:1.选中全部非标签区域内容;2.在选中的区域中替换掉全部的/。就这样# B. E: p4 n5 w$ j2 s6 h' G

    ' t9 q) K. ^4 a/ W
    2 E1 r% Z3 G5 Y1 [$ r) O5 j- S# v# v2 N

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:34:37 | 显示全部楼层
    jonah_w 发表于 2019-1-16 19:009 t8 j+ `3 Z( O1 B: y
    供参考:
    2 i- g# i5 j1 y! O
    这个不行。最后还有残留。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:37:30 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-16 20:55 编辑
    " `- Z* l- Q) o" ]/ j  ~/ ]+ g
    1 I5 t+ Y3 o% w) r+ {, \用这个(?=>)[^<]+?(?=<)然后全选替换。
    ) g: p* m7 {, E/ m1 `结果和16楼基本一样。

    该用户从未签到

    发表于 2019-1-16 20:44:54 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-16 20:46 编辑
    ( U, J; }! @; Z5 Q& Y
    atauzki 发表于 2019-1-16 20:37
    1 b! A+ b. Q6 z4 _$ L用这个(?=>)[^

    : q; D2 L4 e# P8 n2 W( T5 Y你看懂16楼的方法了吗,再下载图片看看详细过程吧,我是调试通过了才贴出方法的
    2 c. W3 ^% I8 B! ]+ w/ Z$ ]
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:54:25 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-16 21:01 编辑 ) ?8 e3 \5 \$ d" A5 f
    dongzhi1980 发表于 2019-1-16 20:44. {' v+ ]) O- `) g
    你看懂16楼的方法了吗,再下载图片看看详细过程吧,我是调试通过了才贴出方法的
    ! L' m! a* {+ ^4 J4 b ...
    ' R: f5 \8 ~1 R" T$ w
    测试过了。详细过程不一样,我还是明白的。第二步我就不贴了。8 ?5 }4 H9 Q9 X, L# i5 F

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x

    该用户从未签到

    发表于 2019-1-16 21:03:02 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-17 10:31 编辑 3 R, h+ O! g# `! y: l* h
    atauzki 发表于 2019-1-16 20:54( a1 j9 O1 J3 w" G, ~$ b" X5 ]% Z
    测试过了。详细过程不一样,我还是明白的。
    + [8 V  O; z8 J
    仔细想一想,第一步用正则可以成功选中非标签区域的所有内容(包括“/”),然后第二步用正常方法(非正则)对选中的内容中的“/”进行替换,怎么能不成功。3 M' P7 k9 [3 b/ n, l6 F1 R
    0 n' g2 X0 u9 W$ H  C" T, P
    看了你的图片,可能是我没说清楚,第一步的目的是选中全部非标签区域,你做对了,然后选中目标后点击 “同一对话框”中的替换(就在那对话框下面),就会自动切换到“替换”对话框,然后在替换对话框中按我的图片2中的进行操作就行了(注意“取消正则”并点击“仅选中的内容”这两项)。+ ?  W5 F8 |1 ]7 ?+ v
    下面这个附件中是我录制的视频操作过程,可以参考一下(EmEditor Version 18.4.0)
    * A5 ~- U: M9 q. t, ^! V1 u% y: e& w; H1 d  K- Z" z

    0 a) `6 j0 V8 Z2 S2 {4 [

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-16 23:32:58 | 显示全部楼层
    atauzki 发表于 2019-1-16 20:34
    : w; N, s" n4 Q( L这个不行。最后还有残留。
    9 |) {0 x- y+ G$ v
    可能编辑器对正则的支持不尽相同,我这边是可以的。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-17 10:24:34 | 显示全部楼层
    哦去,这个问题还没结束啊,建议按9楼的方法,就是借助EmEditor正则取出一部分再正则替换一次,最能减少误伤几率,还不用手动写脚本。
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-1-17 12:28:02 | 显示全部楼层
    >[^<]+< 不是可以完美定位?3 n4 X0 m% A) U. W3 u

      h8 d! D; K  F! Rhttps://regex101.com/r/MAw0Wr/1/
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2025-5-7 03:09 , Processed in 0.024277 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表