我正在尝试使用Python 3.7中的re.sub
捕获字符串中一个或多个下划线或破折号之前的第一组字符。我当前的功能是:
re.sub(r'(\w+)[-_]?.*', r'\1', x)
。
示例字符串:
x = 'CAM14_20190417121301_000'
x = 'CAM16-20190417121301_000'
实际输出:
CAM14_20190417121301_000
CAM16
所需的输出:
CAM14
CAM16
当第一组后面有破折号而不是下划线时,为什么它起作用?我还尝试了re.sub(r'(\w+)_?.*', r'\1', x)
来试图迫使它抓住下划线,但这返回了相同的结果。我希望代码足够灵活以捕获其中任何一个。
答案 0 :(得分:1)
\w
匹配下划线,请考虑改用此正则表达式:
re.sub(r'([a-zA-Z0-9]+)[-_]?.*', r'\1', x)