【问题标题】:Regular Expression that return matches specific strings in bracket and return its next and preceding string in brackets返回匹配括号中的特定字符串并在括号中返回其下一个和前一个字符串的正则表达式
【发布时间】:2021-07-16 20:14:09
【问题描述】:

我需要在括号中找到匹配某个特定字符串和字符串中所有值的字符串。 不是我从字符串匹配的位置获取值。

text = 'This is an sample string which have some information in brackets (info; matchingString, someotherString).'

regex= r"\(*?matchingString.*?\)"
matches = re.findall(regex, text)

从这里我得到结果 匹配字符串,其他字符串) 我想要的是在匹配字符串之前获取字符串。 结果应该是这样的: (信息;匹配字符串,其他字符串) 如果匹配字符串在括号中的第一个字符串中,则此正则表达式有效。

【问题讨论】:

  • 使用r"\([^()]*?matchingString[^)]*\)",见regex demo
  • \(.*? 中应该有一个 .,否则你匹配可选的括号给你部分匹配。
  • 不,上面提到的堆栈溢出链接问题没有回答问题。但我从那里得到帮助,并能够创建我的问题中提到的正则表达式。

标签: python python-3.x regex


【解决方案1】:

你可以使用

\([^()]*?matchingString[^)]*\)

请参阅regex demo。由于[^()]*?,匹配永远不会溢出其他(...) 子字符串。

正则表达式详细信息

  • \( - 一个 ( 字符
  • [^()]*? - 除() 之外的零个或多个字符尽可能少
  • matchingString - 硬编码字符串
  • [^)]* - 除) 之外的零个或多个字符
  • \) - 一个 ) 字符。

Python demo

import re
text = 'This is an sample string which have some information in brackets (info; matchingString, someotherString).'
regex= r"\([^()]*?matchingString[^)]*\)"
print( re.findall(regex, text) )
# => ['(info; matchingString, someotherString)']

【讨论】:

  • 是的,谢谢这回答了这个问题。当我使用 r"([^()]*?matchingString[^)]*)" 时,只会出现一个问题,如果括号末尾有 URL,则此正则表达式会中断,例如:正则表达式结果为 match='( 2.26B 版,MTI 健康服务,m> 但它应该像这样匹配:(2.26B 版,MTI 健康服务,mtifwb.com)当匹配字符串是 MTI 健康服务时。
  • @AbdulMuqeet 不明白你的意思。如果您需要后续帮助,请分享 regex101.com 小提琴。
  • 非常感谢您的帮助。实际上,我正在使用一个新的正则表达式,我想在其中找到一个确切的字符串,然后是 et.al,然后是某个数字。为了实现这一点,我创建了一个适用于某些字符串的正则表达式,但我不确定它是否适用于每个字符串。你能纠正这个吗?这对我真的很有帮助,谢谢。 regex101.com/r/hspAND/1
  • @AbdulMuqeet 抱歉,我不清楚,请参阅this regex demo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多