我有一长串数据,如下所示:
dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd
请注意'12345.123'模式是相同的。我想用python将字符串拆分(所以s.split(<regex>)
)。
适当的正则表达式是什么?
'[0-9]{5}.[0-9]{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}
表示.