Python从字符串获取参数

时间:2018-07-22 19:20:42

标签: python string arguments

我想从python中的字符串中获取参数...

我想抓住这个字符串的所在城市:weather in <city>

我如何到达城市?放入新变量?

3 个答案:

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