0

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

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

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

在这个例子中,我想要变量 digits = 003

4

4 回答 4

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

于 2013-06-12T13:56:40.917 回答
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']
于 2013-06-12T13:58:00.347 回答
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']
于 2013-06-12T14:01:30.360 回答
0

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

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

这涵盖了1-3 位数字之间的任何情况

于 2018-04-30T17:15:48.817 回答