我有一些示例字符串:
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#+”都有效?
谢谢!
答案 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+)-?(.*)$
或:
(s\d+)-?([0-9]+)?\/?([0-9]+)?$
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', '')]