Python 正则表达式匹配/拆分
我在试图弄清楚如何在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” 我想在这些分隔符上拆分给定的字符串,因此: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' 请注意,我确实允许使用一些其他分隔符,
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!