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

Python 如何在正则表达式中仅排除一个字符?,python,regex,Python,Regex,我想从字符串中提取一些东西。例如,字符串为: 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.searc

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

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

您可以将
\S
替换为
\w
,如下所示:

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

这里有两种方法来完成这项工作:

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
输出:

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

为什么不直接使用
s.split(',,1)[0]
?你为什么需要正则表达式?你可以用boundary这个词?类似于
re.search(r'xxx\b\S+\b',S).group()
,或者根据用例的不同,仅仅是
str.split
就可以了suffice@Sayse您好,这只是一个简单的演示,考虑到其他因素,我需要使用正则表达式。@DennisLi您需要显示正确答案的正确输入。样本输入越多,结果就越好better@hansolo谢谢你的提醒,我会添加更多的例子。我的解释太简单了,但在我的例子中,我必须使用\S。你能提供另一个字符串示例和预期输出吗?这个表达式
xxx[^\r\n\t\f\v]+
相当于
xxx\S+
,你可以这样做:
xxx[^\r\n\t\f\v,]+
添加逗号,这可能是一个解决方案。谢谢。谢谢,后面不总是逗号,我已经更新了相关的输入和预期输出。@DennisLi:第二个正则表达式适用于所有测试用例。对于第一个,只需将其更改为
r'xxx\S+?(?=,|\S |$)'