擅长:python、mysql、java
<pre><code>regstr = ".*([0-90-9]{3}[-ー]{1}[0-90-9]{4}).*"
</code></pre>
<p>在python3中,<code>regstr</code>将是包含一些非ascii字符的unicode字符串。在python2中,它是以某种编码方式编码的字符串,这取决于您在模块开头声明的内容(请参见<a href="https://www.python.org/dev/peps/pep-0263/" rel="nofollow noreferrer">PEP 263</a>)以及实际用于保存文件的编码。为了避免这样的问题,我建议您永远不要在regex中使用unicode字符。这太难调试了。而不是逃离他们。你知道吗</p>
<p>字符0123456789是unicode字符<code>'\uff10'</code>到<code>'\uff19'</code>,所以我建议您应该这样使用它们。你知道吗</p>
<p>此外,如果您使用的是unicode正则表达式,那么应该使用<a href="https://docs.python.org/2/tutorial/introduction.html#unicode-strings" rel="nofollow noreferrer">unicode strings</a>的<code>u</code>前缀来定义它:</p>
<pre><code>regstr = u".*([0-9\uff10-\uff19]{3}[-\u30fc]{1}[0-9\uff10-\uff19]{4}).*"
</code></pre>
<p>稍后,当您将这个正则表达式与某个字符串匹配时,另一个字符串也应该是<code>unicode</code>字符串,而不是普通的<code>str</code>。为此,您必须知道输入的编码方式。例如,如果输入是<code>utf-8</code>,则使用:</p>
<pre><code>input_string_as_unicode = unicode(input_string_as_utf8, 'utf-8')
re.match(regstr, input_string_as_unicode)
</code></pre>
<p>请注意,您可能已经有了作为<code>unicode</code>的输入,如果有一些框架支持您这样做的话。如果您不确定,请检查<code>type(input_string)</code>。你知道吗</p>