Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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,我在试图弄清楚如何在python中使用正则表达式时遇到了一些困难。最终我要做的是sscanf在C中为我做的事情 我正在尝试匹配如下所示的给定字符串: 12345_任意字符串_2020_05_20_10_10_10.dat 我似乎能够通过调用以下正则表达式的match来验证这种格式 regex=re.compile'[0-9]{5}.+{[0-9]{4}[-\][0-9]{2}[-\][0-9]{2}[-\][0-9]{2}[:::\\\\\\\\.dat' 请注意,我确实允许使用一些其他分隔符,

我在试图弄清楚如何在python中使用正则表达式时遇到了一些困难。最终我要做的是sscanf在C中为我做的事情

我正在尝试匹配如下所示的给定字符串:

12345_任意字符串_2020_05_20_10_10_10.dat

我似乎能够通过调用以下正则表达式的match来验证这种格式

regex=re.compile'[0-9]{5}.+{[0-9]{4}[-\][0-9]{2}[-\][0-9]{2}[-\][0-9]{2}[:::\\\\\\\\.dat'

请注意,我确实允许使用一些其他分隔符,然后只使用“\u1”

我想在这些分隔符上拆分给定的字符串,因此:

regex = re.compile('[_\\-:.]+')
parts = regex.split(given_string) 
这一切都很好。。问题是,我希望我的“arbitrarystring”部分包括“-”和“u”,而最后一次拆分当前将它们拆分


除了手动剪切给定字符串的时间戳和前5位数字外,我还能做些什么来获取该ArricryString部分?

您可以使用捕获组来获取ArricryString部分,并省略其他捕获组

例如,您可以使用字符类来匹配1个以上的单词字符,或者使用[\w-]+

如果仍要使用拆分,可以为第一部分和第二部分添加捕获组,并仅拆分这些组

^[0-9]{5}_([\w-]+)_[0-9]{4}[-_][0-9]{2}[-_][0-9]{2}[-_][0-9]{2}[:_][0-9]{2}[:_][0-9]{2}\.dat$
          ^^^^^^^^

您可以使用捕获组来获取arbitrarystring部分,并省略其他捕获组

例如,您可以使用字符类来匹配1个以上的单词字符,或者使用[\w-]+

如果仍要使用拆分,可以为第一部分和第二部分添加捕获组,并仅拆分这些组

^[0-9]{5}_([\w-]+)_[0-9]{4}[-_][0-9]{2}[-_][0-9]{2}[-_][0-9]{2}[:_][0-9]{2}[:_][0-9]{2}\.dat$
          ^^^^^^^^

似乎可以减少正则表达式以验证整个模式:

^\d{5}_(.+?)_\d{4}[-_](?:\d{2}[-_]){2}(?:\d{2}[:_]){2}\d{2}\.dat$
有关任意字符串,请参阅组1


快速提醒:您似乎没有使用原始字符串,而是使用了双反斜杠进行转义。Python有字符串,使您不必再逃避反斜杠。

似乎可以减少正则表达式以验证整个模式:

^\d{5}_(.+?)_\d{4}[-_](?:\d{2}[-_]){2}(?:\d{2}[:_]){2}\d{2}\.dat$
有关任意字符串,请参阅组1


快速提醒:您似乎没有使用原始字符串,而是使用了双反斜杠进行转义。Python有字符串,这使您不再需要转义反斜杠。

同样的概念。很好,usuall=@JvdV如果OP想要比单词字符或连字符更广泛的匹配,那么您的模式将更好地使用非贪婪点。谢谢,我也不知道regex101!同样的概念。很好,usuall=@JvdV如果OP想要比单词字符或连字符更广泛的匹配,那么您的模式将更好地使用非贪婪点。谢谢,我也不知道regex101!