:[email protected] PRIVMSG #CHANNEL :MESSAGE
而我試圖讓一切從第二封信,在這種情況下是N,下一!
,其中在這種情況下是第六個字母。
問題是NAME
發生變化,可能會很長。但是,它只能包含A-Z,0-9和-
,所以我應該沒問題就用!
。最終輸出將是NAME
。
:[email protected] PRIVMSG #CHANNEL :MESSAGE
而我試圖讓一切從第二封信,在這種情況下是N,下一!
,其中在這種情況下是第六個字母。
問題是NAME
發生變化,可能會很長。但是,它只能包含A-Z,0-9和-
,所以我應該沒問題就用!
。最終輸出將是NAME
。
讓我們開始發現 '!':
我們有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
嘗試使用string.index(c)獲取字符串中第一次出現c字符的索引。通過使用regex
作爲
>>> my_str = ":[email protected] PRIVMSG #CHANNEL :MESSAGE"
>>> start_index, delimiter = 1, '!'
>>> my_str[start_index: my_str[start_index:].index(delimiter)+1]
'NAME'
OR,:
在此之後,你可以用它來切片字符串:
i=string.index("!")
sliced = string[1:i]
如果首次出現「!」在「N」之前,該怎麼辦? –
它會引發錯誤,但我認爲他會使用該字符串格式 –
@Moinuddin Quadri第一次出現「!」不能是實際名稱。只允許A-Z,0-9和'-'。 – MibMoot
您可以利用串通過在這裏做切片電源:
>>> my_str = ":[email protected] 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
(我是一個巨大的正則表達式仇視,但它是一個合理的合適)來實現它的原因。
s = ':[email protected] 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 ""
試試這個:
import re
a = ":[email protected] PRIVMSG"
match = re.findall(":([A-Z0-9-]*)!", a)
print(match[0])
您可以使用正則表達式來獲得的第一個名字,通過檢查字母數字的字符串的第一個實例,並強調結合:
import re
string = ":[email protected] 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]
在這種情況下,你只是想'NAME'? – roganjosh
@krwllbrdr不正確。 –
是的,我只是想要「名稱」,我編輯的帖子澄清。 – MibMoot