【问题标题】:How to change code to match any character and not just letters如何更改代码以匹配任何字符而不仅仅是字母
【发布时间】:2019-12-01 21:26:12
【问题描述】:

我正在尝试用左括号匹配任何单词:'(',我想出了这个正则表达式,到目前为止它匹配带左括号的单词,但是当另一个特殊字符(如点或右括号)时停止出现。我想匹配整个单词,直到出现空格。

 re.compile(r'[a-zA-Z]*\([a-zA-Z]*', flags=re.IGNORECASE)

【问题讨论】:

标签: python regex word


【解决方案1】:

这样的东西可以完成这项工作吗? r"\(([a-zA-Z]*) "

只要不使用代表字符串开头和结尾的^$symbols,就不需要指定要匹配的模式之前或之后的内容。

因此,以您为例,如果您对左括号之前的内容没有任何要求,那么您使用的第一组 [a-zA-Z]* 将毫无用处。此外,您犯了另一个错误,因为在您的正则表达式中,您没有在第二个 [a-zA-Z]* 组之后放置空格。因为要匹配左括号和空格之间的每个单词,所以需要将空格放在正则表达式字符串中。

编辑:解决问题的解决方案是([^ ]*\([^ ]*) 阅读有关此问题的 cmets 以查看讨论

【讨论】:

  • 不,现在只匹配括号之间的内容:如果它是sum(bytes),它会返回bytes,而不是整个内容
  • 那我不明白你的要求。你说我想匹配整个单词,直到出现空格所以我知道你想匹配括号内的内容。您能否指定字符串示例以及正则表达式应返回的内容?
  • 它应该返回任何远程类似于一个带有左括号的单词的东西,这里是一个逗号分隔的示例列表:distinct(sale, count(distinct IDs), sum(bytes), avg(money)/6
  • 这将捕获所有包含一个或多个字母、一个左括号以及直到出现空格的所有组:([a-zA-Z]*\([^ ]*)
  • 谢谢!这行得通,最终使用了([^ ]*\([^ ]*),因为它实际上匹配了用空格分隔的任何内容,并带有“(”,很高兴我现在有这个在我的武器库中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2021-10-09
  • 2018-11-21
  • 2011-08-29
相关资源
最近更新 更多