我想从python中的字符串中获取参数...
我想抓住这个字符串的所在城市:weather in <city>
我如何到达城市?放入新变量?
答案 0 :(得分:1)
使用正则表达式!
如果您还没有听说过,那很简单。只需导入re
模块,您就可以离开!
>>> import re
好的,也许那并不令人兴奋。但是现在您可以使用模式匹配。只需定义您的模式:
>>> pattern = r"^(?P<thing>.*?) in (?P<city>.*?)$"
然后走开!
>>> re.match(pattern, "weather in my city")
<_sre.SRE_Match object; span=(0, 18), match='weather in my city'>
别担心!这实际上是有用的。让我们将其存储在变量中,以便可以使用它:
>>> match = re.match(pattern, "weather in my city")
>>> match.group("city")
'my city'
万岁!
现在,pattern
这疯狂的事情是什么?它起作用了,但是看起来就像魔术一样。让我解释一下:
r""
仅使Python将(大多数)\
s当作文字\
。因此,与换行符相反,r"\n"
将是实际的\
,后跟实际的n
。这是因为正则表达式对于\
字符具有特殊的含义,并且必须一直写\\
很麻烦。^
的意思是“字符串的开头”。(?P<name>...)
是一个命名组。普通组用(...)
表示,并且可以用其编号(例如match.group(0)
)来引用。命名组也可以按数字引用,但也可以按其名称引用。 P
代表Python,因为这是语法的原始来源。干净!.
的意思是“任何字符”。*
的意思是“重复0次或多次”。?
意味着几件事,但是当它在*
或+
之后时,则意味着“尽可能少地匹配”。这意味着它将使thing
组中的“任何字符”尽可能少。in
的确切含义。
之后是i
,然后是n
,然后是
。.*?
再次表示“匹配尽可能少的任何字符”,但是...考虑到这一点,我不确定我为什么写那个$
的意思是“字符串的结尾”。是的,他们从没有真正停止像魔术一样。 (除非您使用Perl。)如果要制作自己的正则表达式或学习更多内容,请查看the documentation for the re
module。
答案 1 :(得分:0)
如果您的字符串中有恒定的空格并且您的字符串不会改变,则相对容易。只需在字符串上使用split
。
x = "weather in <city>"
split_x = x.split(" ")
# will return you
["weather", "in", "<city>"]
city = split_x[2]
查看split's个文档。但是假设您的城市类似于“纽约”,那么您将不得不寻找其他选择,因为在这种情况下,列表将为-
x = "weather in New York"
# O/P
["weather", "in", "New", "York"]
然后,如果您这样做-
city = split_x[2]
您输入的城市名称错误
答案 2 :(得分:0)
使用str.lstrip()
:
s = "weather in Las Vegas"
city_name = s.lstrip('weather in ')
print(city_name)
打印:
Las Vegas