我有一个带有很多随机单词和数字的长文本行,我希望将一个变量分配给该行中唯一的 3 位数字。
数字每行都会改变,但始终只有 3 位数字。如何在 linepython 中搜索唯一的 3 位数字?可能有一些 3 个字母的单词,所以它必须只是数字。
09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000
在这个例子中,我想要变量 digits = 003
我有一个带有很多随机单词和数字的长文本行,我希望将一个变量分配给该行中唯一的 3 位数字。
数字每行都会改变,但始终只有 3 位数字。如何在 linepython 中搜索唯一的 3 位数字?可能有一些 3 个字母的单词,所以它必须只是数字。
09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000
在这个例子中,我想要变量 digits = 003
您可以使用正则表达式。或者查找一个数字,然后手动检查接下来的两个字符。
我会使用正则表达式:
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
。
带有\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']
由于正则表达式的解决方案:
>>> 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']
在 Python 中,我得到了以下工作(基于上面的答案):
re.compile('prefix\d{1,3}\suffix')})
这涵盖了1-3 位数字之间的任何情况