我想在第三个下划线和点之间添加额外的字母数字,示例如下
CSV_20121023000854Z_MMSC_35dbc3f813.csv
预期输出:
35dbc3f813
这个正则表达式可以解决问题(\_\w{15}\_\w{4}\_)(\w+)
,但是我希望它更灵活,以防字符串大小增加。谢谢
我想在第三个下划线和点之间添加额外的字母数字,示例如下
CSV_20121023000854Z_MMSC_35dbc3f813.csv
预期输出:
35dbc3f813
这个正则表达式可以解决问题(\_\w{15}\_\w{4}\_)(\w+)
,但是我希望它更灵活,以防字符串大小增加。谢谢
为什么不这样呢?
_([^_]+)\.csv
它将捕获最后一个下划线和.csv
.
或者,您可以使用您选择的语言对其进行拆分:
>>> s = 'CSV_20121023000854Z_MMSC_35dbc3f813.csv'
>>> s.split('.')[0].split('_')[-1]
'35dbc3f813'
_(\w+)\.csv
正则表达式适用于贪婪模式,它将继续匹配模式,并将提取匹配的最后一个模式,在您的情况下是所需的字符串。
这是不关心下划线之间字符串长度的正则表达式:
^.*?_.*?_.*?_(\w+)\..*$
匹配部分甚至可以有一个下划线(在第三个下划线之后匹配)。点可以出现在第三个下划线之前。
这是它的一个例子: http ://regex101.com/r/jT9fR0
您说过输入字符串中存在三个下划线字符,
1)如果您确定某些字符会出现在 _ 字符之间,那么正则表达式应该是:
.+?_.+?_.+?_(.+)\..+
2)如果不是那么正则表达式应该是这样的:
.*?_.*?_.*?_(.+)\..*
贪婪的运营商后面的问号让运营商不情愿。