链接re.sub()而不破坏以前的re.sub() - python

时间:2013-12-10 09:51:04

标签: python regex string substitution

我有一个这样的文件:

(a) a. lo mfana
(20) Juan - il- -ech (lik) !
EB1: Incwadi [esi-yi-funda-yo: isitshudeni] in-de
Papa-wu-rna parlapiya-nyi paja-lkura.
b) kupi-Nku Nia taca-mu
i. gaan1 fong2 hak1 maa1 maa1, nei5 dim2 tai2 dou2 syu1 gaa3 i. 
4. a. ngo5 lou5gung1 ci3ci3 faan1lei4. dou1 haak1 saai3 gam2
(n-ngwathel-l-e )
M: sik6-saai3 laa3!   (17)
U3 :      O?i=j se-si-ni           duy-ur-am-yor-du (17)

我想在字符串的开头删除类似子弹的子字符串。这些项目符号用圆括号括起来,最多包含3个字母数字字符,以.):结尾。

所需的输出是:

a. lo mfana
Juan - il- -ech (lik) !
Incwadi [esi-yi-funda-yo: isitshudeni] in-de
Papa-wu-rna parlapiya-nyi paja-lkura.
kupi-Nku Nia taca-mu
gaan1 fong2 hak1 maa1 maa1, nei5 dim2 tai2 dou2 syu1 gaa3 i. 
a. ngo5 lou5gung1 ci3ci3 faan1lei4. dou1 haak1 saai3 gam2
(n-ngwathel-l-e )
sik6-saai3 laa3!   (17)
O?i=j se-si-ni           duy-ur-am-yor-du (17)

我一直在这样做,但我的正则表达式。但我失败是因为:

  • 使用 src = re.sub(r'\([^)]*\)', '', src) ,我删除了超过标题(...)

    [in]:(20)Juan - il-ech(喜欢)!

    [out]: Juan - il-ech!

    [需要]: Juan - il-ech(喜欢)!

  • 使用 src = re.sub(r'^\([^)]*\)', '', src) ,我能够在正则表达式中指定^行的开头,但它没有获得最多3个字母数字条件。

    [in]:(n-ngwathel-l-e)

    [out]:

    [需要]:(n-ngwathel-l-e)

    [in]: U3:O?i = j se-si-ni duy-ur-am-yor-du(17)

    [out]:

    [需要]: O?i = j se-si-ni duy-ur-am-yor-du(17)

  • 使用 re.sub(r'^:[^)]*\)', '',src)re.sub(r'^\.[^)]*\)', '',src) ,我无法使正则表达式检测[0-9a-zA-z][0-9a-zA-z][0-9a-zA-z]后跟.或{ {1}}

    [in]: 4. a。 ngo5 lou5gung1 ci3ci3 faan1lei4。 dou1 haak1 saai3 gam2

    [out]: 4. a。 ngo5 lou5gung1 ci3ci3 faan1lei4。 dou1 haak1 saai3 gam2

    [需要]: a。 ngo5 lou5gung1 ci3ci3 faan1lei4。 dou1 haak1 saai3 gam2

    [in]: EB1:Incwadi [esi-yi-funda-yo:isitshudeni] in-de

    [out]: EB1:Incwadi [esi-yi-funda-yo:isitshudeni] in-de

    [需要]: Incwadi [esi-yi-funda-yo:isitshudeni] in-de

我应该如何形成单个正则表达式/正则表达式替换链,以便我不会破坏其他正则表达式的其他正则表达式条件?

1 个答案:

答案 0 :(得分:1)

解决方案

^\(?\w{1,3}\s*[):.]\s*

描述

Regular expression visualization

演示

http://regexr.com?37j1p

讨论

我将采用你的每个正则表达式并输出每个问题:

1。使用src = re.sub(r'([^]] )','',src),我删除了超过标题(...)*

*量词是贪婪的。它会尝试不是)最可能的字符。这就是为什么你得到的不仅仅是标题。

2。使用src = re.sub(r'^\([^)]*\)', '', src),我能够在正则表达式中使用^指定行的开头,但它没有获得最多3个字母数字条件。

*量词表示zero or more。如果您想要最多3个字母数字,则需要使用此量词:{1,3}。这意味着1,2或3次。

3.使用re.sub(r'^:[^]] )','',src)和re.sub(r'^。[^]] ) ','',src),我无法进行正则表达式检测[0-9a-zA-z] [0-9a-zA-z] [0-9a-zA-z],然后是a。或者:

此处正则表达式缺少.:以分别匹配这些字符。