文本中的正则表达式模式

时间:2016-10-02 13:03:42

标签: python regex

我有一长串数据,如下所示:

dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd

请注意'12345.123'模式是相同的。我想用python将字符串拆分(所以s.split(<regex>))。

适当的正则表达式是什么?

'[0-9]{5}.[0-9]{3}'

不起作用;我认为它期待它周围的空白(?)。

3 个答案:

答案 0 :(得分:4)

逃避.,你就完成了:

\d{5}\.\d{3}

您可以使用正则表达式标记\d作为[0-9]的简写。

示例:

>>> re.split(r'\d{5}\.\d{3}', 'dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd')
['dstgfsda', 'gsrsvrvsdfcsd', 'tsrsd']

答案 1 :(得分:1)

我并不完全明白您的实际需求是什么,但似乎您希望您的正则表达式将每次出现的5位数,点数,3位数隔离开。

因此,'[0-9]{5}.[0-9]{3}'代替'[0-9]{5}\.[0-9]{3}',因为.匹配任何字符,而\.只匹配一个点。

答案 2 :(得分:1)

你的正则表达式应该是'\d{5}\.\d{3}'

检查.的使用情况,而不是\.。那是因为, '。' (点。)在默认模式下,匹配除换行符之外的任何字符。请参阅regex文档。而\s表示字符串中的dot

例如:

import re
my_string = 'dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd'
my_regex = '\d{5}\.\d{3}'
re.split(my_regex, my_string)
# returns: ['dstgfsda', 'gsrsvrvsdfcsd', 'tsrsd']
关于'\d{5}\.\d{3}'如何运作的

解释

\d表示0-9之间的任何数字。 \d{5}子串,任意5个连续数字。 \.表示数字后跟单.。最后\d{3}表示.

之后的任意3位数字