python - 如何在正则表达式中只排除一个字符?
问题描述
我想从字符串中提取一些东西。例如字符串是:
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="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
推荐阅读
- mongodb - 如何将 ObjectId 参数添加到 mongodb 查找
- flutter - 如何避免在颤动中与 api 的连接错误?(断点类型出现在VS代码中)
- php - 如何在 CodeIgniter 中获取自定义开关复选框值?
- django - AttributeError: __name__ 在 Django 中导入熊猫时
- node.js - Xero Oauth 2 - 您无权连接任何 WorkflowMax 帐户
- python - 将 python rss feed 与 feedparser 一起使用时出现问题
- mongodb - Mongodb的“更大”和“更少”在有索引的情况下运行得更快吗
- mule - Munit 2.1 模拟 Map 响应并将其作为文件引用
- angular - Angular NgRx 选择器返回未定义
- javascript - 如何阻止控件用鼠标移动立方体(gift/page2)