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