我有一个带有大量随机单词和数字的长文本行,我希望将一个变量分配给该行中唯一的3位数字。
数字会改变每一行,但总是只有3位数。如何在linepython中搜索唯一的3位数字?可能有3个字母的单词,所以它必须是数字。
09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000
在这个例子中我想要变量数字= 003
答案 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位数
之间的情况