在python中的文本行中搜索3位数字

时间:2013-06-12 13:54:53

标签: python

我有一个带有大量随机单词和数字的长文本行,我希望将一个变量分配给该行中唯一的3位数字。

数字会改变每一行,但总是只有3位数。如何在linepython中搜索唯一的3位数字?可能有3个字母的单词,所以它必须是数字。

09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000

在这个例子中我想要变量数字= 003

4 个答案:

答案 0 :(得分:5)

您可以使用正则表达式。或者查找一个数字,然后手动检查接下来的两个字符。

我会使用正则表达式:

import re

threedig = re.compile(r'\b(\d{3})\b') # Regular expression matching three digits.

\b表示“单词边界”,(\d{3})表示“三位数”,括号使其成为“组”,以便找到匹配的文本。

然后搜索:

mo = threedig.search("09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000")
if mo:
  print mo.group(1)

以上打印333

答案 1 :(得分:5)

带有\b字边界的正则表达式可以解决这个问题:

re.findall(r'\b\d{3}\b', inputtext)

返回所有3位数字的列表。

演示:

>>> import re
>>> inputtext = '09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000'
>>> re.findall(r'\b\d{3}\b', inputtext)
['003']
>>> inputtext = 'exact: 444, short: 12, long: 1234, at the end of the line: 456'
>>> re.findall(r'\b\d{3}\b', inputtext)
['444', '456']

答案 2 :(得分:0)

感谢正则表达式的解决方案:

>>> s = "007 09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000 008"
>>> r = re.findall(r'(?:[^\d]|\A)(\d{3})(?:[^\d]|\Z)', s)
>>> r
['007', '003', '008']

答案 3 :(得分:0)

在Python中,我得到了以下工作(基于上面的答案):

re.compile('prefix\d{1,3}\suffix')})

这涵盖 1-3位数

之间的情况