掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1566|回复: 21

[求助] 请教正则表达式去除重复内容

[复制链接]

该用户从未签到

发表于 2019-4-26 14:52:39 | 显示全部楼层 |阅读模式
本帖最后由 dongzhi1980 于 2019-4-26 14:56 编辑
7 {9 Q* l- r5 U6 E% m# ]. b; C& _- H
要处理内容如下:* H1 }7 E" {) Z6 D0 I( B

' M' }; p8 W! b' f: [) |8 c# q. mChinese 中文 汉语 中国人 中文 华侨 中文 中国人的
3 p. h3 |9 z, C  P3 l7 L. `2 pAmerican 美国人 美国公民 美国人 美国人的 美国的
& u) l+ O1 t, E: \5 O; }3 R
1 f! `# K+ e9 C: x全文不一一列举,请问,如何用正则处理第一行使结果中只保留第一个“中文”,其他不变,第二行类似,只保留第一个“美国人”而其他不变。烦请解释处理的过程。谢谢!
& O  j+ S7 D, j4 U+ F
. A' k1 e7 G/ @/ ^5 Y  l6 N" M  D
  R& u2 i! r' a. r4 m4 M6 x2 {+ |

本帖被以下淘专辑推荐:

  • TA的每日心情
    擦汗
    2023-9-2 09:16
  • 签到天数: 1103 天

    [LV.10]以坛为家III

    发表于 2019-4-26 15:58:47 | 显示全部楼层
    这个已经在正则能力之外了,正则的能力是很有限的。你这一类用awk处理应该很方便。具体需要可查手册。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-4-26 15:07:31 | 显示全部楼层

    该用户从未签到

    发表于 2019-4-26 15:01:20 | 显示全部楼层
    你可以直接贴进excel,用空格分隔,然后删掉右边的数据就好了

    该用户从未签到

     楼主| 发表于 2019-4-26 15:19:11 | 显示全部楼层
    klwo2 发表于 2019-4-26 15:011 A7 ?  n4 O+ U7 B
    你可以直接贴进excel,用空格分隔,然后删掉右边的数据就好了

    7 ~" V: [" S( T) h/ V" J4 m8 [因为文件较大,右侧重复的数据又不是相邻的单元格,各行长度不一,所以,不知道在Excel中如何处理,能详细些吗?
  • TA的每日心情
    奋斗
    2021-9-28 10:33
  • 签到天数: 314 天

    [LV.8]以坛为家I

    发表于 2019-4-26 15:20:29 | 显示全部楼层
    jonah_w 发表于 2019-4-26 15:07
    0 ?  ~% v& R: |6 W2 h8 Ehttps://regex101.com/r/dTixFz/1
    ' i! u( L6 L! O5 ^4 j
    这是个好东西。

    该用户从未签到

     楼主| 发表于 2019-4-26 15:26:43 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-4-26 15:53 编辑 7 Z$ [( M  S3 T0 \% e

    6 v' C2 Z, K1 S4 n! ?& }5 o) ~谢谢你。你链接的程序应该能处理,请问为什么我粘贴进去的(或者在里面直接写进去)的重复内容不能自动去重?( v' D- w, e9 J0 }* Y
    8 v. U9 H& `" O  |! h) t, F

    $ u4 R6 Z) R8 n
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-4-26 15:55:01 | 显示全部楼层
    dongzhi1980 发表于 2019-4-26 15:26$ B, J5 ?, R; H! ~( I; w% m. ~
    谢谢你。你链接的程序应该能处理,请问为什么我粘贴进去的(或者在里面直接写进去)的重复内容不能自动去 ...

    0 m! C1 k8 |5 \1 H- b6 d一行最后留一个空格就好了2 Q# N. X0 h$ o, z6 T( J9 Q
    5 m% o9 z+ e0 \6 x" ]/ v; z& X
    或者这样也可以
    - z  @7 M/ ]/ Z4 D. C7 {https://regex101.com/r/dTixFz/4

    点评

    你这次给出的链接,可以通过反复粘贴的方法解决去除所有的重复项,谢谢!  发表于 2019-4-26 16:18

    评分

    1

    查看全部评分

  • TA的每日心情
    郁闷
    2018-5-17 09:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-4-26 22:22:07 | 显示全部楼层
    本帖最后由 y8888 于 2019-4-27 07:43 编辑
    0 j, U' f0 x9 `& [1 w3 @$ F; a6 l4 f2 g# T# m  T' C$ L5 n
    用Em查找输入 ^(.*[a-z] [[:unicode:]].*?) .** N+ F9 u: P( T% s
    替换中输入\1( H6 V. U. _+ e" Y0 u$ P

    4 a- X) U1 u2 K& U8 o8 z* ?见图,这种是保留英文及一个中文是不是你想要的这种结果?
    ( x+ k- q4 G: M! G/ x/ H6 D) H; g* S& _0 E

    , {0 n3 E' j6 P4 }如果只要第一出现的中文则9 u' U- d+ q8 ^
    查找输入^(.*[a-z] )([[:unicode:]].*?) .*+ M' S3 ^' ^+ H( Y
    替换中输入\2
    ( u- C4 W4 S1 q" u8 i, K( ]6 r$ H# }  }5 G% T

    6 N% e1 [8 K6 ]: P" }4 ?3 A

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-27 10:36:27 | 显示全部楼层
    jonah_w 发表于 2019-4-26 15:07
    # p9 G8 l  X! v, s! y- yhttps://regex101.com/r/dTixFz/1
    : K7 W! Q) Q( {  E1 N4 U
    你好,你的答案还能再完善一下吗,第二次替换时有点问题,谢谢7 s9 N/ O0 o+ n' w: |3 f
    第一次时没有问题
    ! A' k5 q. w: U7 G6 r: g* {9 [4 N1 e) d# e( `
    ) q( v" M% ]1 [9 Q
    第二次时,替换掉了不该替换的内容
    5 A- i) \$ A8 ^
    7 S  F4 C9 F, [: E; G9 ^$ z* v+ k: |) X, e% n

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-27 10:39:39 | 显示全部楼层
    y8888 发表于 2019-4-26 22:22* a7 k& ?; l1 d  P
    用Em查找输入 ^(.*[a-z] [[:unicode:]].*?) .*
    - ~" W# _. k+ a" S% Q替换中输入\1

    $ A8 v; U7 }; X9 H* N) t谢谢你,我想要的是“对于重复出现的项,只保留第一次出现的一项,其他内容不变“。可能是我没表达清楚,不好意思。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-4-27 10:40:12 | 显示全部楼层
    dongzhi1980 发表于 2019-4-27 10:36- t6 E- v. k: S' L1 ]5 ]7 E
    你好,你的答案还能再完善一下吗,第二次替换时有点问题,谢谢8 {2 T" a4 O" N5 g
    第一次时没有问题
    ) W/ R  Q& x+ |1 n) K+ ~) Y
    https://regex101.com/r/dTixFz/6

    该用户从未签到

     楼主| 发表于 2019-4-27 10:47:12 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-4-27 10:54 编辑 % V2 ?* p% f$ S, Y4 ]

    # |# u7 j/ C0 c0 m8 W/ E; V谢谢,闪电般的答复。经验证,你的正则可以移植到Emeditor里,效果更好。
    3 p3 L7 ~3 g5 [1 w( Y% S8 U/ X1 Z( `7 o) e

    该用户从未签到

    发表于 2019-4-27 22:50:58 | 显示全部楼层
    awk is one of the best tools, if not the best, to work with tabular data. 6 L+ w8 Q( R5 a
    on the other hand, powerful it is, regular expression is overly used in the wrong places.
    9 V6 W9 t0 l. t9 D  |5 s. g& I! a! b0 s: H( z' v
    To solve your problem with awk,( j8 @0 J4 d1 N* G
    awk '{for(i=3; i<=NF; i++) if($i==$2) $i = "" } { print }' 2nd-col.txt > 2nd-cleaned.txt
    % d# x3 O% D  y: t! J* A  ?: E& k, a, w# W, d: |# [6 W
    suppose 2nd-col.txt is your original file and 2nd-cleaned.txt is your cleaned file.6 B! s' _: S1 y7 A; p& ?
    I've uploaded a screenshot, but I'm not sure whether it shows correctly.
    . S5 i# Y- w9 [/ H3 O# b
    3 \6 ^, P1 s' M/ O1 a, P5 k; j

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-28 08:00:32 | 显示全部楼层
    csw016 发表于 2019-4-27 22:503 k* [( k- \8 B8 a% s8 u
    awk is one of the best tools, if not the best, to work with tabular data. 1 p% E% S# b* Y9 b! |1 Y1 v
    on the other hand, powerf ...
    4 v7 F/ |3 ?+ @  F+ n
    谢谢你,感觉为了一个功能应用去学一门语言有点过了。
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-4-29 10:16:50 | 显示全部楼层
    一qq群友给的答案:
    3 O3 a+ N1 _6 b  [  ^& J: B3 y1 h' F8 p: ^8 Q& h& s) J
    \s(\S+)(?=\s)(?<=(.*\s\1){2})3 @* I! w0 H% ]2 [; a, s* m) H! G

    5 V, x1 Q! _+ x$ e, _9 h( Rhttps://regex101.com/r/ldXeDC/2
    0 H: s  C; l0 i; K+ h( o
    8 n3 u7 C7 ?. d* l7 k要求支持肯定型逆序环视,Javascript正则引擎支持肯定型逆序环视,python, php,perl的t正则引擎貌似都不支持肯定型逆序环视, notepad++、emeditor大致也不会支持肯定型逆序环视, eeditpad有可能支持肯定型逆序环视,没试过

    评分

    1

    查看全部评分

    该用户从未签到

     楼主| 发表于 2019-4-29 15:39:31 | 显示全部楼层
    mikeee 发表于 2019-4-29 10:16
    2 z6 }. ]/ V! ?, n# S" J: b/ z" m一qq群友给的答案:6 L% A( q) \  E" o
    ; A) L/ m$ m; t, p7 g
    \s(\S+)(?=\s)(?

    7 [0 r2 o' q8 E" g1 W4 T+ x你看自己发的链接了吗,替换前后有何不同?
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-4-29 16:59:36 | 显示全部楼层
    本帖最后由 mikeee 于 2019-4-29 17:07 编辑
    3 `( R9 x7 t6 F. x: ~- w
    dongzhi1980 发表于 2019-4-29 15:39  |& C7 v& s; w( B# i& a
    你看自己发的链接了吗,替换前后有何不同?
    & o- c2 \3 u6 r; R) [. T: ]5 B
    用 Chrome 打开 https://regex101.com/r/ldXeDC/2 看看
    6 H$ d  O& s8 ?' s/ q
    ! X, j" J1 E# c1 X5 P, y1 ?替换后
    - `' \. N7 Y* p. c+ S
    1. Chinese 中文 汉语 中国人 华侨 中国人的
      , W5 W9 d. P4 Q. ~  X/ Q
    2. American 美国人 美国公民 美国人的 美国的
    复制代码
    % q7 V. P! `# B* J7 Y
    9 z( g% \' D4 B& [
    Edge不支持肯定型逆序环视。regex101会显示 pattern error。
    2 V$ s, n3 m* P6 d, P& k

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2019-4-29 17:47:42 | 显示全部楼层
    mikeee 发表于 2019-4-29 10:16
      u$ L) ?8 `. S, F& ~) R  j" k一qq群友给的答案:& [2 s+ P" z+ ]9 M/ b

    : d& l- A) g* D, w  G$ R, ^: P, S2 C\s(\S+)(?=\s)(?

    & U5 Y5 `" o' t& F这个例子让我对regex look around有了更进一步的理解,前一阵子学习的时候就这一部分理解有问题,太感谢您和这位群友了!
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2019-4-29 17:54:13 | 显示全部楼层
    mikeee 发表于 2019-4-29 10:16
    ! {7 Q" u. G1 W' _  |. ^; F一qq群友给的答案:3 m2 d) o3 M  u  H

    ! J% [! v& d: l3 h5 f+ X  H& Y9 V3 U\s(\S+)(?=\s)(?

    7 c% D/ c/ T: J2 D  k, w2 ]这个简直是regex look around的经典范例啊,越看越觉得写的太好了,收藏了!

    该用户从未签到

     楼主| 发表于 2019-4-29 21:46:25 | 显示全部楼层
    mikeee 发表于 2019-4-29 16:59
    1 F* [3 I' g8 ]( F0 ~) R用 Chrome 打开 https://regex101.com/r/ldXeDC/2 看看0 D" _& T; I" H. Q+ d
    2 _  i" z+ B0 x0 @
    替换后

    / M/ @0 n, @0 f, `% I6 T" ?如你所说,一次成型,牛,Chorme下通过,Firefox失效
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-5-21 10:20 , Processed in 0.064407 second(s), 12 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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