【问题标题】:Remove part of string from "[" to the end从“[”中删除部分字符串到末尾
【发布时间】:2020-09-03 08:50:41
【问题描述】:

下面是我的文本文件的 sn-p:

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) 如果字符串包含here(abc) remove(abc)

2) 如果字符串中包含(abc) remove(abc)

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

它没有给我任何错误,但第二行 (elif) 不起作用...

有人能帮我一把吗?

输出示例:

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

【问题讨论】:

  • 为什么在这里使用结尾/
  • @AlwaysSunny 错误!以上已更正:)

标签: python string pandas list dataframe


【解决方案1】:

它应该可以在没有尾随 / 的情况下工作,我尝试使用正则表达式 sub, REGEX

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))

【讨论】:

  • @TimBiegeleisen,Opps。发布并看到您的答案:)
  • @Caledonian26 顺便说一句,您可以使用 \d+ 代替 .*? 以仅允许数字
  • 如果我想删除(俄克拉荷马大学)[1]:括号和数字,我都会做 print(re.sub(r'(.*?)[.*?] ', "", i))?
  • 我认为你需要这个\(.*?\)\[.*?\],在这里查看正则表达式:regex101.com/r/2Dlnxj/5
  • 是的,这对我有用!如果我想在单词和'('之间有一个空格,我会这样做: print(re.sub(r'\ (.*?)[.*?]', "", i))?
【解决方案2】:

我们可以在这里尝试使用re.sub

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

这假设在每行末尾出现的[num] 标记之后没有任何内容。如果后面还有一些其他的内容,上面的模式就不得不调整了。

【讨论】:

  • 请看我上面修改过的帖子!
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多