所以从这个字符串:
“名称[ID]”
我需要这个:
“ID”
我使用了str.split('[]'),但它不起作用。它只需要一个分隔符吗?
答案 0 :(得分:13)
使用正则表达式:
import re
s = "name[id]"
re.find(r"\[(.*?)\]", s).group(1) # = 'id'
str.split()
需要一个字符串来分割输入。例如:
"i,split,on commas".split(',') # = ['i', 'split', 'on commas']
re
模块还允许您通过正则表达式进行拆分,这可能非常有用,我想你应该这样做。
import re
s = "name[id]"
# split by either a '[' or a ']'
re.split('\[|\]', s) # = ['name', 'id', '']
答案 1 :(得分:7)
无论
"name[id]".split('[')[1][:-1] == "id"
或
"name[id]".split('[')[1].split(']')[0] == "id"
或
re.search(r'\[(.*?)\]',"name[id]").group(1) == "id"
或
re.split(r'[\[\]]',"name[id]")[1] == "id"
答案 2 :(得分:3)
是的,分隔符是传递给split的整个字符串参数。因此,您的示例只会拆分一个字符串,例如'name [] id []'。
尝试例如。类似的东西:
'name[id]'.split('[', 1)[-1].split(']', 1)[0]
'name[id]'.split('[', 1)[-1].rstrip(']')
答案 3 :(得分:2)
我不是正则表达式的粉丝,但在像它经常提供最佳解决方案的情况下。
Triptych已经推荐了这个,但我想指出的是?P<>组分配可用于为字典键分配匹配项:
>>> m = re.match(r'.*\[(?P<id>\w+)\]', 'name[id]')
>>> result_dict = m.groupdict()
>>> result_dict
{'id': 'id'}
>>>
答案 4 :(得分:1)
您实际上并不需要正则表达式。 .index()函数和字符串切片可以正常工作。
说我们有:
>>> s = 'name[id]'
然后:
>>> s[s.index('[')+1:s.index(']')]
'id'
对我来说,这很容易理解:“在[并在之前完成]之后开始一个字符。”
答案 5 :(得分:1)
def between_brackets(text):
return text.partition('[')[2].partition(']')[0]
即使您的字符串不包含[…]
构造,这也会起作用,如果您在某个地方只有一个]
,它会假设最后隐含[
字符串。
答案 6 :(得分:0)
我是python的新手,这是一个老问题,但也许这个?
str.split('[')[1].strip(']')
答案 7 :(得分:0)
您可以使用[]获得列表的值。例如,使用下面的URL从URL创建一个列表。
>>> urls = 'http://quotes.toscrape.com/page/1/'
这会生成一个类似于下面的列表。
>>> print( urls.split("/") )
['http:', '', 'quotes.toscrape.com', 'page', '11', '']
如果您只想从此列表中获得“ http”值,该怎么办?您可以这样使用
>>> print(urls.split("/")[0])
http:
或者,如果您想仅从该列表中获取值“ 1”怎么办?您可以这样使用
>>> print(urls.split("/")[-2])
1
答案 8 :(得分:-1)
str.split使用整个参数来分割字符串。尝试:
str.split("[")[1].split("]")[0]