如何在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)