繁体   English   中英

如何从Python字符串中删除括号内的文本?

[英]How to remove text within parentheses from Python string?

我正在尝试删除括号以及这些括号中的文本以及连字符。 一些字符串示例如下所示:
example = 'Year 1.2 Q4.1 (Section 1.5 Report (#222))'
example2 = 'Year 2-7 Q4.8 - Data markets and phases' ##there are two hyphens

我希望结果是:

example = 'Year 1.2 Q4.1'  
example2 = 'Year 2-7 Q4.8'  

如何删除括号和特殊字符内或之后的文本? 我只能找到str.strip()方法。 我是Python的新手,因此非常感谢您提供任何反馈!

您可以使用下面的正则表达式来获得所需的结果:

"\(.*\)|\s-\s.*"
#   ^     ^  Pattern 2: everything followed by space, '-' hyphen, space
#   ^   Pattern 1: everything within brackets (....)

样品运行:

>>> import re
>>> my_regex = "\(.*\)|\s-\s.*"

>>> example = 'Year 1.2 Q4.1 (Section 1.5 Report (#222))'
>>> example2 = 'Year 2-7 Q4.8 - Data markets and phases'

>>> re.sub(my_regex, "", example)
'Year 1.2 Q4.1'
>>> re.sub(my_regex, "", example2)
'Year 2-7 Q4.8'

在这里,我使用的是re.sub(pattern, repl, string, ...) ,正如文档所说:

返回通过用替换repl替换字符串中最左边的不重叠模式所获得的字符串。 如果找不到该模式,则返回的字符串不变。 repl可以是字符串或函数; 如果是字符串,则处理其中的任何反斜杠转义。

我们可以使用*和一次性变量来实现。

example = 'Year 1.2 Q4.1 (Section 1.5 Report (#222))'
display,*_ = example.split('(')
print(display)

example2 = 'Year 2-7 Q4.8 - Data markets and phases' ##there are two hyphens
part_1,part_2,*_ = example2.split('-')
display = part_1 + '-'+ part_2
print(display)

您可以尝试执行以下操作,在获取结果以使其成为所需输出后,您几乎不需要清理数据:

import re
data=[]
pattern=r'\(.+\)|\s\-.+'
with open('file.txt','r') as f:
    for line in f:
        match=re.search(pattern,line)
        data.append(line.replace(match.group(),'').strip())

print(data)

这是一个没有正则表达式的示例(只是为了表明您拥有良好的正则表达式即可):

代码添加字符串,直到字符串以Q开头:

example = 'Year 1.2 Q4.1 (Section 1.5 Report (#222))'

def clean_string(s):
    for item in s.split():
        yield item
        if item.startswith('Q'):
            break

print(' '.join(clean_string(example)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM