解析首字母大写的字符串

时间:2020-01-01 10:46:56

标签: python regex parsing split

我有一个像这样的字符串: 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的所有内容的印刷品,我也不知道如何获得想要的特定文本。

有什么建议吗?

3 个答案:

答案 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'