从第二个字母到特定字符获取字符串

时间:2017-02-05 21:09:54

标签: python string python-3.x

我有这个

:NAME!NAME@NAME.tmi.twitch.tv PRIVMSG #CHANNEL :MESSAGE

我试图从第二个字母(在本例中是N)到下一个!,在这种情况下是第六个字母。

关键是NAME发生变化,可能会很长。但是,它只能包含A-Z,0-9和-,所以我只能使用!。最终输出为NAME

6 个答案:

答案 0 :(得分:0)

尝试使用string.index(c)获取字符串中第一次出现c字符的索引。

在此之后你可以用它来切片:

i=string.index("!")
sliced = string[1:i]

答案 1 :(得分:0)

您可以通过以下方式利用字符串切片的强大功能:

>>> my_str = ":NAME!NAME@NAME.tmi.twitch.tv PRIVMSG #CHANNEL :MESSAGE"
>>> start_index, delimiter = 1, '!'

>>> my_str[start_index:  my_str[start_index:].index(delimiter)+1]
'NAME'

或者,使用regex作为:

>>> my_str = ":NAME!NAME@NAME.tmi.twitch.tv PRIVMSG #CHANNEL :MESSAGE"
>>> second_char = my_str[1]  # second character of the string
>>> delimiter = "!"   # your next character

>>> import re
>>> re.findall('{}.*{}'.format(second_char, delimiter), my_str)[0]
'NAME!'

PS:实现这一点的一般方法是考虑场景,假设起始索引位于第20个字符,第一个出现的!出现在第5个索引处。然后mystr[20:5]将为空。根据OP,他希望"到下一个!" ,这是第20个字符后第一次出现!。这里提到的大多数答案都没有解决这个问题。这就是我复杂的切片符号的原因,也是使用regex (我是一个巨大的正则表达式仇恨者,但这是合理的选择)实现它。

答案 2 :(得分:0)

让我们开始寻找'!':

我们有string.find(string) find功能来帮助我们,或string.index(string) index功能。它们都将返回我们正在寻找的子字符串的索引(在我们的例子中是1个字符)。

现在,为cuttnig原始字符串。可以使用方括号(子串)来完成切割 - s[start:end:step]是您的语法。

所以我们想从索引为1的char开始,到使用find或index找到的char。

假设s是原始字符串:

s[1:s.find("!")]

应返回预期结果。如果你想让它具有包容性(包括'!'):

s[1:s.find("!") + 1] # Taking one index more

答案 3 :(得分:0)

s = ':NAME!NAME@NAME.tmi.twitch.tv PRIVMSG #CHANNEL :MESSAGE'
first = ':'
last = '!'
def find_between( s, first, last ):
    try:
        start = s.index( first ) + len( first )
        end = s.index( last, start )
        return s[start:end]
    except ValueError:
        return ""

答案 4 :(得分:0)

试试这个:

import re
a = ":NAME-87520!NAME@NAME.tmi.twitch.tv PRIVMSG"

match = re.findall(":([A-Z0-9-]*)!", a)
print(match[0])

答案 5 :(得分:0)

您可以使用正则表达式来获取第一个NAME,方法是检查字母数字和下划线组合的子字符串的第一个实例:

import re

string = ":NAME!NAME@NAME.tmi.twitch.tv PRIVMSG #CHANNEL :MESSAGE"
pattern = '[a-zA-Z0-9-]+'
result = re.search(pattern, string)
print(result.group(0))

[a-zA-Z0-9-]+说"一组连续的字母数字和破折号,至少找到1个),re.search()在字符串中搜索第一个实例。

要获取MESSAGE,您可以使用字符串和str.rsplit,或者右键拆分一次并获取最后一个结果:

msg = string.rsplit(':', 1)[-1]