如何在Python中重新编译变量?
我是初学者。这看起来很简单,但我花了几个小时搜索和尝试不同的东西,却没有运气。我想将正在编译的字符串表示为变量 所以这是可行的: 但这并不是: 在我的程序中,卡片是不断变化的。我该怎么做 我得到的错误是:如何在Python中重新编译变量?,python,regex,Python,Regex,我是初学者。这看起来很简单,但我花了几个小时搜索和尝试不同的东西,却没有运气。我想将正在编译的字符串表示为变量 所以这是可行的: 但这并不是: 在我的程序中,卡片是不断变化的。我该怎么做 我得到的错误是: 第二个示例中的问题是,您将['4c'](列表)分配给卡,而不是“['4c']”(第一个示例中使用的字符串)。需要一个字符串模式 调整如下,您的第二个示例将像第一个示例一样工作: import re # added for clarity card = "['4c']" # ^
第二个示例中的问题是,您将
['4c']
(列表)分配给卡
,而不是“['4c']”
(第一个示例中使用的字符串)。需要一个字符串模式
调整如下,您的第二个示例将像第一个示例一样工作:
import re # added for clarity
card = "['4c']"
# ^ ^
p = re.compile(card)
# or
card = ['4c']
p = re.compile(str(card)) # str(card) == "['4c']"
# ^^^^ ^
for m in p.finditer('234567891JQKA'):
q = str(m.start() + 2)
# added for clarity
print m.start() # prints 2
print q # prints 4
说到这里,这个模式似乎很可疑。至少,
'
在中是多余的(以开头的[
和结尾的]
为边界):确保卡是一个字符串,指定了适合您需要的合理正则表达式模式。您的程序中至少有两个错误
首先,一个奇怪的正则表达式通配符
在使用基本正则表达式之前,您至少应该阅读它,但您显然误解了它,这里有一些有用且有用的信息
['4c']
(错误!它代表一个字符'
,4
或c
,但有重复的'
)
['4c]
(对!它代表一个字符,4或c
)
[4c']
(对!它代表一个字符'
,4
或c
)
[4c]
(对!它代表一个字符4
或c
)
第二,Python列表!=正则表达式通配符
['4c']
是一个包含字符串'4c'
的列表
“['4c']”
是一个包含正则表达式通配符的字符串
最后,如果您喜欢使用第二种形式的代码,那么您的代码应该如下所示
card = "['4c']" # not clear here what you want to do
p = re.compile(card)
for m in p.finditer('234567891JQKA'):
q = str(m.start() + 2)
str(['4c'])
给出了“['4c']”
程序应该做什么?你确定第一个模式是你真正想要的,你实际上想做什么?谢谢…p=re.compile(str(card))工作得很好。抱歉这么简单的问题。恕我直言,这基本上是我半小时前回答的问题,重要性顺序相反(给出问题陈述)。与其(很大程度上)重新分析答案,不如评论并帮助改进它。其他人当然也应该为你做同样的事情。老实说,我甚至没有读过你的答案,这个问题很短,答案的范围很窄,同样的答案想法也并不意外。我在这里所期望的,只是希望你的答案或我的答案能帮助他,仅此而已。很公平。这种情况发生了;这件事发生在我身上,我也用同样的方式解释过。30分钟是一段很长的时间,你要回答的问题没有另一个答案。不是我的,但你的代码与OP的第一个示例完全相同,因此你没有真正回答如何在Python中重新编译变量的问题,OP有一个变量,所以告诉他们手动更改它并不是很简单helpful@PadraicCunningham:我的代码与OP的第一个示例不完全相同。请重读这两本书。它们显然是不同的——变量card
是关键区别……也是OP要求的关键。
File "C:\Python34\lib\re.py", line 223, in compile
return _compile(pattern, flags)
File "C:\Python34\lib\re.py", line 282, in _compile
p, loc = _cache[type(pattern), pattern, flags]
TypeError: unhashable type: 'list'
import re # added for clarity
card = "['4c']"
# ^ ^
p = re.compile(card)
# or
card = ['4c']
p = re.compile(str(card)) # str(card) == "['4c']"
# ^^^^ ^
for m in p.finditer('234567891JQKA'):
q = str(m.start() + 2)
# added for clarity
print m.start() # prints 2
print q # prints 4
card = "['4c']" # not clear here what you want to do
p = re.compile(card)
for m in p.finditer('234567891JQKA'):
q = str(m.start() + 2)