我有一个像这样的字符串:
b57gff83_fail_HAP_SCREAM_K_SEARCH_X_SKAR_2
我想要一个新的字符串,其中包含从第一个大写字母一直到最后这样的所有内容:
HAP_SCREAM_K_SEARCH_X_SKAR_2
我尝试将re.split与其他正则表达式选项一起使用,但无法捕获全部文本。
到目前为止,我最好的是:
((\_[A-Z] *)\d *(\_ *[A-Z]*)) *
哪个不如我所愿。
到目前为止,这是我的代码:
text = line.split()
parsedText = re.split('[A-Z]*', text[1])
print(parsedText)
line
是我分割的行,因为我只需要第二部分。
我得到的是所有parsedText
的所有内容的印刷品,我也不知道如何获得想要的特定文本。
有什么建议吗?
答案 0 :(得分:1)
您使正则表达式复杂化了。
import re
string = 'b57gff83_fail_HAP_SCREAM_K_SEARCH_X_SKAR_2'
print(re.findall(r'([A-Z].*)', string))
输出
['HAP_SCREAM_K_SEARCH_X_SKAR_2']
答案 1 :(得分:0)
您可能已经使用[A-Z].*
,但请注意,如果所有大写字母均为ASCII,它将可以正常使用。如果对所有输入都适用,这很好,但是,如果遇到非ASCII大写字母,那么最好使用str
方法.isupper
的方式如下:
txt = 'b57gff83_fail_HAP_SCREAM_K_SEARCH_X_SKAR_2'
uppers = [i.isupper() for i in txt]
if True in uppers:
parsed = txt[uppers.index(True):]
print(parsed) # HAP_SCREAM_K_SEARCH_X_SKAR_2
else:
print('txt has not any uppercase character')
答案 2 :(得分:0)
从第一个大写字母开始保留所有内容,与删除其之前的所有内容相同。
>>> re.sub('^[^A-Z]+', '', 'b57gff83_fail_HAP_SCREAM_K_SEARCH_X_SKAR_2')
'HAP_SCREAM_K_SEARCH_X_SKAR_2'