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 |$)'