掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1601|回复: 21

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

[复制链接]

该用户从未签到

发表于 2019-4-26 14:52:39 | 显示全部楼层 |阅读模式
本帖最后由 dongzhi1980 于 2019-4-26 14:56 编辑 3 ?0 a7 T$ [& S# L  ]6 \  t- t3 k4 |

* s, k6 n% Y& a5 x6 w要处理内容如下:( [, I7 u, }0 @/ S, r
5 V3 |% h. U6 i; C" k
Chinese 中文 汉语 中国人 中文 华侨 中文 中国人的" Q( E; ^9 S% V- Q
American 美国人 美国公民 美国人 美国人的 美国的
+ Z6 y- [3 R$ l* [. i: _9 A
; e$ }* X5 x. C, ]全文不一一列举,请问,如何用正则处理第一行使结果中只保留第一个“中文”,其他不变,第二行类似,只保留第一个“美国人”而其他不变。烦请解释处理的过程。谢谢!
2 p' s; r- ~, @& L5 k5 ?  W8 S4 e3 j

! U7 ?7 ~0 o9 W2 l) {2 S

本帖被以下淘专辑推荐:

  • 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:01
    " S" q; v6 S. X1 h% `. _, ?( |你可以直接贴进excel,用空格分隔,然后删掉右边的数据就好了

    - t' I- }$ v0 F0 ]5 b因为文件较大,右侧重复的数据又不是相邻的单元格,各行长度不一,所以,不知道在Excel中如何处理,能详细些吗?
  • TA的每日心情
    奋斗
    2021-9-28 10:33
  • 签到天数: 314 天

    [LV.8]以坛为家I

    发表于 2019-4-26 15:20:29 | 显示全部楼层
    jonah_w 发表于 2019-4-26 15:07
    8 _( ]- |# b, Q: ~6 Dhttps://regex101.com/r/dTixFz/1

    # h. F" |- g. S% O3 m这是个好东西。

    该用户从未签到

     楼主| 发表于 2019-4-26 15:26:43 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-4-26 15:53 编辑
    ; B) D3 B9 [& G) {% M7 g; C+ o" E( u: A9 D3 N' _6 Z
    谢谢你。你链接的程序应该能处理,请问为什么我粘贴进去的(或者在里面直接写进去)的重复内容不能自动去重?
    ) K: l" n# L* W) a  l6 T, N; l9 [- y/ o. X$ }# p

    ) I+ n3 V1 i' h6 |4 D
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-4-26 15:55:01 | 显示全部楼层
    dongzhi1980 发表于 2019-4-26 15:260 l4 e; C2 N1 l! d
    谢谢你。你链接的程序应该能处理,请问为什么我粘贴进去的(或者在里面直接写进去)的重复内容不能自动去 ...

    ' W3 k7 M' B5 b+ [5 B) E8 `, F一行最后留一个空格就好了
    3 ~4 m) D' [+ [& ^, |* \" n) v3 \2 r
    " ^" Z( d/ S+ v# g5 C0 F或者这样也可以/ u! P$ A' Z3 D/ L5 S+ b6 h
    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 编辑 ; Y: T4 k% a4 A! Y* ~' t7 j' [

    8 J# z. ~, ~+ d: O* U$ {8 `用Em查找输入 ^(.*[a-z] [[:unicode:]].*?) .*5 |$ x' g8 Y+ [7 n  J# \+ J5 }1 r4 I
    替换中输入\1
    ' P4 ?  H% J8 W4 G4 _
    + R; i0 b) D) }2 R3 W见图,这种是保留英文及一个中文是不是你想要的这种结果?: g8 a# P: B$ p# v0 a; i; J/ W9 ]# ?

    - T* _5 h% e$ r4 T* w# p+ p* Z8 Y) ^& K9 _. A0 U) Y
    如果只要第一出现的中文则  J8 K* C& c, A5 g, [5 K/ R$ F1 q
    查找输入^(.*[a-z] )([[:unicode:]].*?) .** J' x8 K: _0 B$ J) G% t: |, m
    替换中输入\21 V5 L+ W+ h: T/ r6 f

    1 K7 f) W# A' P1 N& Q$ R4 P$ k. b* ~# k- `

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-27 10:36:27 | 显示全部楼层
    jonah_w 发表于 2019-4-26 15:07& }( b& L/ C! u5 P% ?1 m: i9 E, e
    https://regex101.com/r/dTixFz/1

    4 U0 n+ v; J* r+ O" ~+ Z你好,你的答案还能再完善一下吗,第二次替换时有点问题,谢谢
    ) D+ S0 }2 ~0 A第一次时没有问题3 g" ?6 Y  L( T

    - ^4 G# E* b) g4 O: G. a# U7 _2 N- ^, A7 Z# f. \! M5 z
    第二次时,替换掉了不该替换的内容
    5 L4 J  [0 I6 B% O0 j7 C9 y" i' [1 s1 [4 }: L* w) B

    + [0 H4 P8 i/ S9 H, g0 H

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-27 10:39:39 | 显示全部楼层
    y8888 发表于 2019-4-26 22:225 i6 {) q. @) D6 H- T1 d3 N9 H
    用Em查找输入 ^(.*[a-z] [[:unicode:]].*?) .*. A4 J3 M$ }# L
    替换中输入\1
    % y5 J2 z9 n! ^" n6 U9 k
    谢谢你,我想要的是“对于重复出现的项,只保留第一次出现的一项,其他内容不变“。可能是我没表达清楚,不好意思。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-4-27 10:40:12 | 显示全部楼层
    dongzhi1980 发表于 2019-4-27 10:36
    ' ^5 p" E( H/ X你好,你的答案还能再完善一下吗,第二次替换时有点问题,谢谢- y/ f/ U5 J/ T: N* {' z! e+ |
    第一次时没有问题
    + h. B$ V+ m7 a& F$ \7 w" G
    https://regex101.com/r/dTixFz/6

    该用户从未签到

     楼主| 发表于 2019-4-27 10:47:12 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-4-27 10:54 编辑
    , F$ w3 f8 u! t% [5 u- N" N1 K6 \; |6 E, B. F* W: e* z; m
    谢谢,闪电般的答复。经验证,你的正则可以移植到Emeditor里,效果更好。
    9 R8 E0 z1 c8 x. o. `% @* @( H: z$ y

    该用户从未签到

    发表于 2019-4-27 22:50:58 | 显示全部楼层
    awk is one of the best tools, if not the best, to work with tabular data. 9 |5 B* x# ]( {2 g" m2 h* w% G
    on the other hand, powerful it is, regular expression is overly used in the wrong places.
    / A- Q3 M& @3 b% [6 ^% @
    ( k; ^. g* E7 c: }To solve your problem with awk,
    ; E2 J  x  A2 s5 A3 lawk '{for(i=3; i<=NF; i++) if($i==$2) $i = "" } { print }' 2nd-col.txt > 2nd-cleaned.txt
    * a3 u8 v7 T/ s' H
    1 c, C4 E1 ^& ^9 esuppose 2nd-col.txt is your original file and 2nd-cleaned.txt is your cleaned file.
    $ R# a0 w5 E) ?I've uploaded a screenshot, but I'm not sure whether it shows correctly.  u. y" ~4 V: P9 m% v! F

    $ M+ ~8 m4 W2 }) s- l1 v

    本帖子中包含更多资源

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

    x

    该用户从未签到

     楼主| 发表于 2019-4-28 08:00:32 | 显示全部楼层
    csw016 发表于 2019-4-27 22:50) y; k+ |  l' s# f6 v0 Y5 ^1 X
    awk is one of the best tools, if not the best, to work with tabular data. 2 k4 |+ U7 @/ ]
    on the other hand, powerf ...

    & H4 r4 x4 q, }+ ^2 `谢谢你,感觉为了一个功能应用去学一门语言有点过了。
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-4-29 10:16:50 | 显示全部楼层
    一qq群友给的答案:
    - y( N1 K; M% H0 l; X% b# H. I
    * `6 A$ J) E* d4 k\s(\S+)(?=\s)(?<=(.*\s\1){2}). c$ v9 \. s" |- F- M1 ^) G
    7 R4 s, V0 f- c) R0 q; M
    https://regex101.com/r/ldXeDC/2( J" Y  B, Y. h4 k5 k& I
    1 N3 O: P; Q5 D' |. C6 i* X
    要求支持肯定型逆序环视,Javascript正则引擎支持肯定型逆序环视,python, php,perl的t正则引擎貌似都不支持肯定型逆序环视, notepad++、emeditor大致也不会支持肯定型逆序环视, eeditpad有可能支持肯定型逆序环视,没试过

    评分

    1

    查看全部评分

    该用户从未签到

     楼主| 发表于 2019-4-29 15:39:31 | 显示全部楼层
    mikeee 发表于 2019-4-29 10:16
    ' |7 M5 h2 w3 ^! F: |( F" `! n一qq群友给的答案:( T/ [. `& p" m3 Z1 s  Q
      u/ t$ ]& d2 j+ u$ B; A
    \s(\S+)(?=\s)(?

      e! n0 B4 k& O+ y0 K/ _3 E# J你看自己发的链接了吗,替换前后有何不同?
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-4-29 16:59:36 | 显示全部楼层
    本帖最后由 mikeee 于 2019-4-29 17:07 编辑 ) T* Y. g4 {3 ^. U: D! M6 [
    dongzhi1980 发表于 2019-4-29 15:39: {- i% ]5 Y. e! }: n7 a4 l% k4 m9 M
    你看自己发的链接了吗,替换前后有何不同?
    , K! Z, k7 k# y8 V8 ]
    用 Chrome 打开 https://regex101.com/r/ldXeDC/2 看看' q/ O8 b- n: A

    9 I' z1 N/ {% d: g3 O% L' M替换后( {* l- M' [. @) W) p
    1. Chinese 中文 汉语 中国人 华侨 中国人的1 Y3 Z; p6 p+ J+ |" t
    2. American 美国人 美国公民 美国人的 美国的
    复制代码

      ?- E+ R% c5 P# p" x+ y* n9 [  P  D# c9 k. i3 K& F
    Edge不支持肯定型逆序环视。regex101会显示 pattern error。
    2 o7 U% h3 z& Q0 C6 b

    评分

    1

    查看全部评分

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

    [LV.4]偶尔看看III

    发表于 2019-4-29 17:47:42 | 显示全部楼层
    mikeee 发表于 2019-4-29 10:16
    . x4 p2 j. x$ m% E  q0 f一qq群友给的答案:
    0 [" h- @0 g* y" s" E* m/ M0 |
    + b( n; I4 L% D( w. H\s(\S+)(?=\s)(?
    7 f# ^2 s9 _/ v) H( ?5 n
    这个例子让我对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
    # d, N- @7 b& a* o  O8 v- U$ P' }一qq群友给的答案:9 _3 T3 Q7 v* M6 Y* h7 j4 C, c
    7 M& Z; d! {! q. f8 D+ _8 {- e+ c
    \s(\S+)(?=\s)(?
    + N* \! Y: C/ n% p0 e
    这个简直是regex look around的经典范例啊,越看越觉得写的太好了,收藏了!

    该用户从未签到

     楼主| 发表于 2019-4-29 21:46:25 | 显示全部楼层
    mikeee 发表于 2019-4-29 16:59& u( I( E  N2 H' ]0 ~8 Q
    用 Chrome 打开 https://regex101.com/r/ldXeDC/2 看看
    9 [* M4 @$ {0 L" P9 o0 y2 K3 f) f0 A/ K; w. v
    替换后
    4 m8 _$ e2 x% @
    如你所说,一次成型,牛,Chorme下通过,Firefox失效
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-6-14 22:35 , Processed in 0.072807 second(s), 13 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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