首页 > 解决方案 > 如何在正则表达式中只排除一个字符?

问题描述

我想从字符串中提取一些东西。例如字符串是:

s = "xxx text, yyy"
expected = "xxx text"

s = "xxx text yyy"
expected = "xxx text"

s = "xxx [text] yyy"
expected = "xxx [text]"

s = "xxx text,"
expected = "xxx text"

s = "xxx text "
expected = "xxx text"

我目前的代码是:

re.search(r'xxx \S+', s)

所以,在我的正则表达式中,我不能排除逗号','。我知道[^,]可以排除逗号,但我怎样才能将它与\S.

就我而言,我必须使用'\S',我的要求只是排除基于 . 的逗号\S

我尝试了正则表达式断言:re.search(r'xxx (\S+(?!\,))', s).groups(),但它仍然提取了逗号。

标签: pythonregex

解决方案


这是完成这项工作的两种方法:

s="xxx text, yyy"
# if there is ALLWAYS a comma after.
res = re.search(r'xxx \S+(?=,)', s)
print(res.group())
# else
res = re.search(r'xxx [^\s,]+', s)
print(res.group())

根据新的测试用例更新:

ar = [
    "xxx text, yyy",
    "xxx text yyy",
    "xxx [text] yyy",
    "xxx text,",
    "xxx text ",
    "xxx text",
]
for s in ar:
    # choose one of them
    print(re.search(r'xxx \S+?(?=,|\s|$)', s).group())
    print(re.search(r'xxx [^\s,]+', s).group())
    print

输出:

xxx text
xxx text

xxx text
xxx text

xxx [text]
xxx [text]

xxx text
xxx text

xxx text
xxx text

xxx text
xxx text

推荐阅读