Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取每个间隙的前三位数字_Python_Regex - Fatal编程技术网

Python 获取每个间隙的前三位数字

Python 获取每个间隙的前三位数字,python,regex,Python,Regex,刚开始学习正则表达式。我这里有问题 这是到目前为止我的代码 match = re.findall(r'\d{1,3}', string) 我知道我会得到第三个号码。但我不知道如何只说出每一个差距 我有一个字符串,看起来像这样: string = "24812949 2472198 4271748 12472187" ["248", "247", "427", "124"] 我想要这样的结果: string = "24812949 2472198 4271748 12472187" ["2

刚开始学习正则表达式。我这里有问题

这是到目前为止我的代码

match = re.findall(r'\d{1,3}', string)
我知道我会得到第三个号码。但我不知道如何只说出每一个差距

我有一个字符串,看起来像这样:

string = "24812949 2472198 4271748 12472187"
["248", "247", "427", "124"]
我想要这样的结果:

string = "24812949 2472198 4271748 12472187"
["248", "247", "427", "124"]

使用单词边界
\b
<代码>\b匹配单词字符和非单词字符

match = re.findall(r'\b\d{1,3}', string)
match = re.findall(r'(?<!\S)\d{1,3}', string)

否定的后视断言<代码>(?断言匹配前面不会有非空格字符

match = re.findall(r'\b\d{1,3}', string)
match = re.findall(r'(?<!\S)\d{1,3}', string)

match=re.findall(r'(?使用单词边界
\b
\b
匹配单词字符和非单词字符

match = re.findall(r'\b\d{1,3}', string)
match = re.findall(r'(?<!\S)\d{1,3}', string)

负查找断言。
(?断言匹配前面不会有非空格字符

match = re.findall(r'\b\d{1,3}', string)
match = re.findall(r'(?<!\S)\d{1,3}', string)

match=re.findall(r'(?您可以添加
\b
作为单词边界:

>>> re.findall(r'\b\d{1,3}', string)
['248', '247', '427', '124']
但是,如果字符串始终为这种形式,则可以不使用正则表达式:

>>> [i[:3] for i in string.split()]
['248', '247', '427', '124']

您可以添加
\b
作为单词边界:

>>> re.findall(r'\b\d{1,3}', string)
['248', '247', '427', '124']
但是,如果字符串始终为这种形式,则可以不使用正则表达式:

>>> [i[:3] for i in string.split()]
['248', '247', '427', '124']

(?:^ |)(?
(?:^ |)(?尝试以下解决方案:-

string="24812949 2472198 4271748 12472187"
match = re.findall(r'\b\d{1,3}', string)
print match

输出:-['248',247',427',124']

尝试以下解决方案:-

string="24812949 2472198 4271748 12472187"
match = re.findall(r'\b\d{1,3}', string)
print match

输出:-['248'、'247'、'427'、'124']

我很惊讶,没有人会考虑消费剩余的数字,而不是担心边界:

>>> re.findall(r'(\d{1,3})\d*', string)
['248', '247', '427', '124']
通过捕获前3位数字(如果数字较小,则小于3位)下一个匹配在一个数字的中间不可能发生。当前一个匹配结束时,下一个字符之后,如果有的话,必须是非数字的,并且由于引擎从左到右扫描,下一个匹配将从一个数字串的开头开始。
re.findall
当正则表达式中至少有一个捕获组时,函数也只返回捕获组中的内容,这会使整个过程变得平滑。

我很惊讶没有人会考虑使用剩余的数字,而不是担心边界:

>>> re.findall(r'(\d{1,3})\d*', string)
['248', '247', '427', '124']
通过捕获前3位数字(如果数字较小,则小于3位)下一个匹配在一个数字的中间不可能发生。当前一个匹配结束时,下一个字符之后,如果有的话,必须是非数字的,并且由于引擎从左到右扫描,下一个匹配将从一个数字串的开头开始。
re.findall
当正则表达式中至少有一个捕获组时,函数也只返回捕获组中的内容,这会平滑整个过程。

是的,我知道我可以使用
[i[:3]for i in string.split()]
。但我正在尝试学习正则表达式;)是的,我知道我可以使用
[i[:3]对于字符串中的i.split()]
。但我正在尝试学习正则表达式;)