我正在尝试删除括号和这些括号中的文本以及连字符。一些字符串示例如下所示:
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新手,所以非常感谢任何反馈!
答案 0 :(得分:5)
您可以使用以下正则表达式来获得所需的结果:
"\(.*\)|\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 在字符串中出现模式。如果 找不到模式, string 不变。 repl 可以是一个 字符串或函数;如果它是一个字符串,任何反斜杠都会在其中转义 正在处理。
答案 1 :(得分:1)
我们可以使用*和一次性变量来做到这一点。
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)
答案 2 :(得分:1)
您可以尝试这样的事情,在获取结果后将需要很少的数据清理,以使其成为您想要的输出:
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)
答案 3 :(得分:0)
这是一个没有正则表达式的例子(只是为了表明你有很好的正则表达式):
代码添加字符串,直到字符串以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)))