从“ [”到末尾删除字符串的一部分

时间:2020-05-17 15:54:05

标签: python string pandas list dataframe

下面是我的文本文件的摘要:

import re 
f = open('/Users/name/Desktop/university_towns.txt',"r")
f.readlines()

Langston (Langston University)[5]
Norman (University of Oklahoma)[1]
Stillwater (Oklahoma State University)[5]
Tahlequah (Northeastern State University)[2]

我尝试了以下操作:

import re 
f = open('/Users/emreyavuz/Desktop/university_towns.txt',"r")
for i in f.readlines():
    if i.find(r'\(.*?\)'): 
       print(re.sub(r'\(.*?\)\[.*?\]', "", i))
    elif i.find(r'\s?\(.*?\)'):
        print(re.sub(r'\s?\(.*?\)\[.*?\]', "", i))
    else: 
       print(re.sub(r'\[.*?\]', "", i))

上面的代码应执行以下操作:

1)如果字符串包含此处(abc)删除(abc)

2)如果字符串包含此处(abc)删除(abc)

3)如果字符串包含[2] 删除[2]

它没有给我任何错误,但是第二行(elif)无法正常工作...

有人可以帮我吗?

输出示例:

La Crosse 
Madison 
Menomonie 
Milwaukee (Marquette University, University of Wisconsin–Milwaukee)
Oshkosh (University of Wisconsin–Oshkosh)

2 个答案:

答案 0 :(得分:2)

它应该在不尾随/的情况下工作,我尝试使用正则表达式subREGEX

import re
regex = r"\[.*?\]"
test_str = ("Langston (Langston University)[5]\n"
    "Norman (University of Oklahoma)[1]\n"
    "Stillwater (Oklahoma State University)[5]\n"
    "Tahlequah (Northeastern State University)[2]")

subst = ""
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
    print (result)

根据问题编辑和注释,使用单个if条件,您可以完成想要实现的目标,

import re
f = open('/Users/emreyavuz/Desktop/university_towns.txt',"r")
for i in f.readlines():
    if i.find(r'\s?\(.*?\)(\[.*?\])?'):
       print(re.sub(r'\s?\(.*?\)(\[.*?\])?', "", i))

答案 1 :(得分:1)

我们可以在此处尝试使用re.sub

for i in f.readlines():
    print(re.sub(r'\[\d+\]$', '' , i))

这假设在每行末尾出现的[num]标记之后没有任何内容。如果可以遵循其他一些内容,则必须对上述模式进行调整。