python - 如何检测双字节数字

标签 python regex character-encoding python-2.x digits

我必须检查以双字节字符编码的日语字符串(当然这些文件不是 Unicode 格式的,我必须将它们保留为 Shift-JIS 格式)。其中许多字符串包含的数字也是双字节字符 (123456789),而不是标准的单字节数字 (0-9)。因此,搜索数字的常用方法将不起作用(在正则表达式中使用 [0-9],或例如\d)。

我发现使其工作的唯一方法是创建一个元组并迭代字符串中的元组以查找匹配项,但是有更有效的方法吗?

这是我在搜索双字节数字时得到的输出示例:

>>> s = "234"  # "2" is a double-byte integer
>>> if u"2" in s:
      print "y"

>>> if u"2" in s:
      print "y"

    y
>>> print s[0]

>>> print s[:2]
    2
>>> print s[:3]
    23

如有任何建议,我们将不胜感激!

最佳答案

首先,评论是正确的:为了你的理智,你应该只在 Python 代码中使用 unicode,从进来的 Shift-JIS 解码,然后编码回 Shift-JIS(如果是这样的话)您需要输出:

text = incoming_bytes.decode("shift_jis")
# ... do stuff ...
outgoing_bytes = text.encode("shift_jis")

参见:Convert text at the border .

既然您已经正确地处理了unicode和编码字节串,那么使用正则表达式即可轻松获取“任何数字”或“任何双宽数字”:

>>> import re
>>> s = u"234"
>>> digit = re.compile(r"\d", re.U)
>>> for d in re.findall(digit, s):
...     print d,
... 
2 3 4
>>> wdigit = re.compile(u"[0-9]+")
>>> for wd in re.findall(wdigit, s):
...     print wd,
... 
2

如果您不熟悉 re.U 标志,它已记录在 here 中。 .

关于python - 如何检测双字节数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25801215/

相关文章:

regex - HTML 5 的 24 小时时间正则表达式

python - 如何抽象stdin/stdout和文件?

scala - akka http、字符集 header 、utf-8 问题

python - 如何在Python中使用selenium在不同WebDriver打开的不同chrome浏览器窗口之间切换?

python - 捕捉负面前瞻

.net - 如何测试 '-'是否存在,但字符 '['和 ']'之间不存在?

java - 某些脚本即使以 UTF-8 编码,也无法在 JPanel 中正确显示?

python - 在不使用表单的情况下上传 blobstore 中的文件

python - 如何解压mongo日志文件

java - 正则表达式在测试用例中有效,但在实际代码中无效