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

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


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(),但它仍然提取了逗号。


潇湘沐
浏览 317回答 2
2回答

幕布斯6054654

这是完成这项工作的两种方法:s="xxx text, yyy"# if there is ALLWAYS a comma after.res = re.search(r'xxx \S+(?=,)', s)print(res.group())# elseres = 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 textxxx textxxx textxxx textxxx [text]xxx [text]xxx textxxx textxxx textxxx textxxx textxxx text

catspeake

你可以像这样\S替换\w:re.search(r'xxx \w+', s)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python