如何从一个特定的字母开始并在到达数字时结束?

时间:2019-09-18 03:43:14

标签: python regex string

我有一些示例字符串:

s = 'neg(able-23, never-21) s2-1/3'
i = 'amod(Market-8, magical-5) s1'

我遇到的问题是,我可以使用以下方法找出字符串是's1'还是's3'

word = re.search(r's\d$', s)

但是,如果我想知道其中是否包含's2-1/3',它将无法正常工作。 是否存在可以使用的正则表达式,使其对“ s#”和“ s#+”都有效? 谢谢!

2 个答案:

答案 0 :(得分:2)

除了数字之外,您还可以捕获字符"-""/"。在这里很难说出要使用的确切模式,但是类似这样的例子将从您的示例中捕获"s2-1/3"

import re

s = "neg(able-23, never-21) s2-1/3"

word = re.search(r"s\d[-/\d]*$", s)

答案 1 :(得分:1)

我猜想您可能想用一些表达式来提取它,例如:

(s\d+)-?(.*)$

Demo 1

或:

(s\d+)-?([0-9]+)?\/?([0-9]+)?$

Demo 2

测试

import re

expression = r"(s\d+)-?(.*)$"
string = """
neg(able-23, never-21) s211-12/31
neg(able-23, never-21) s2-1/3
amod(Market-8, magical-5) s1
"""
print(re.findall(expression, string, re.M))

输出

[('s211', '12/31'), ('s2', '1/3'), ('s1', '')]