Python从字符串获取参数
我想从python中的字符串中获取一个参数 我想抓住这个字符串的城市:Python从字符串获取参数,python,string,arguments,Python,String,Arguments,我想从python中的字符串中获取一个参数 我想抓住这个字符串的城市:weather in 我怎样才能到达这个城市?转换为新变量?如果字符串中有常量空格,并且字符串不会更改,那么这相对比较容易。只需在字符串上使用split x = "weather in <city>" split_x = x.split(" ") # will return you ["weather", "in", "<city>"] city = split_x[2] 如果你这样做- city =
weather in
我怎样才能到达这个城市?转换为新变量?如果字符串中有常量空格,并且字符串不会更改,那么这相对比较容易。只需在字符串上使用
split
x = "weather in <city>"
split_x = x.split(" ")
# will return you
["weather", "in", "<city>"]
city = split_x[2]
如果你这样做-
city = split_x[2]
您将有错误的城市名称使用正则表达式 如果你没听说过,这很简单。只需导入
re
模块,您就可以离开了
>>> import re
>>> re.match(pattern, "weather in my city")
<_sre.SRE_Match object; span=(0, 18), match='weather in my city'>
好吧,也许那没那么令人兴奋。但是现在你可以使用模式匹配了。只需定义您的模式:
>>> pattern = r"^(?P<thing>.*?) in (?P<city>.*?)$"
万岁
那疯狂的模式是怎么回事?它起作用了,但看起来就像魔术一样。让我解释一下:
r”“
只是让Python将(大多数)\
s视为文本\
s。因此,r“\n”
将是一个实际的\
,后跟一个实际的n
,而不是一个新行字符。这是因为正则表达式对\
字符有特殊的意义,而且总是要编写\
是很尴尬的
^
表示“字符串的开头”
(?P..)
是一个命名组。正常组由(…)
表示,并可通过其编号引用(例如匹配组(0)
)。命名组也可以通过编号引用,但也可以通过名称引用。P
代表Python,因为这就是语法最初的来源。干净利落李>
表示“任何字符”
*
表示“重复0次或更多次”
?
表示一些事情,但当它位于*
或+
之后时,它表示“尽可能少地匹配”。这意味着它将使对象
组具有尽可能少的“任意字符”
在
中的意思就是它的样子。一个
后面跟着一个i
后面跟着一个n
后面跟着一个
*?
再次表示“尽可能少地匹配任何字符”,但。。。考虑到这一点,我不太清楚我为什么要写这个
$
表示“字符串结束”
是的,他们看起来就像魔术一样。(除非您使用Perl。)如果您想创建自己的正则表达式或学习更多内容,请查看。Withstr.lstrip()
:
印刷品:
Las Vegas
你能更新你的文章以包含更多的代码上下文吗?你是说你有一个字符串,上面写着“纽约的天气”,还是说你正在迭代一个名为的列表,其中包含字符串:for weather in city
?如果你提供更多关于你的字符串的详细信息,会更好当城市是“旧金山”或“雅芳河畔的斯特拉特福德”时会发生什么判断前面字符的一致性并将它们从字符串的前面切掉可能会更好?@JohnStark同意,然后我们必须寻找一些alternative@ThatBird正则表达式?我在上面贴了一个答案。@wizzwizz4投赞成票,解释得很好。但如果文本不遵循任何模式,regex也会fails@wizzwizz4你为什么不也放一个正则表达式资源给O/P来通过它呢?天气必须是晴朗、炎热等,在这种情况下,这也会出现
>>> match = re.match(pattern, "weather in my city")
>>> match.group("city")
'my city'
s = "weather in Las Vegas"
city_name = s.lstrip('weather in ')
print(city_name)
Las Vegas