为了账号安全,请及时绑定邮箱和手机立即绑定

如何在正则表达式中只排除一个字符?

如何在正则表达式中只排除一个字符?

潇湘沐 2022-05-19 14:07:29
我想从字符串中提取一些东西。例如字符串是: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(),但它仍然提取了逗号。
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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


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


查看完整回答
反对 回复 2022-05-19
?
catspeake

TA贡献1111条经验 获得超0个赞

你可以像这样\S替换\w

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


查看完整回答
反对 回复 2022-05-19
  • 2 回答
  • 0 关注
  • 316 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信