正则表达式:如何将所有内容放在某个字符之前的方括号中?

时间:2019-01-31 14:24:52

标签: regex python-3.x string python-2.7

如何在特定字符后的括号内返回字符串?我对方括号|#|()之前的字符串感兴趣。给定两个字符串:

s1 = 'This is the part of the string not of interest LEMB(INTEREST)|#|IND'
s2 = 'someotherstring(NOT_OF_INTEREST)

我尝试过使用此正则表达式

pattern = r'(?=\#\|IND)\((.*?)\)'
results = re.findall(pattern,s1)
results[0][0]

应该返回

'INTEREST'

results = re.findall(pattern,s2)应该什么也不返回。

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式,

(?<=\()[^)]*(?=\)\|#\|)

说明:

  • (?<=\()-这种积极的眼光确保了数据前面有文字(
  • [^)]*-捕获您感兴趣的数据
  • (?=\)\|#\|)-积极向前看,以确保紧随其后的是)和文字|#|

Demo

示例Python代码,

import re

arr = ['This is the part of the string not of interest LEMB(INTEREST)|#|IND','someotherstring(NOT_OF_INTEREST)']

for s in arr:
 m = re.search(r'(?<=\()[^)]*(?=\)\|#\|)',s)
 if (m):
  print(s,' --> ',m.group())
 else:
  print(s,' --> No Match')

打印

This is the part of the string not of interest LEMB(INTEREST)|#|IND  -->  INTEREST
someotherstring(NOT_OF_INTEREST)  --> No Match

答案 1 :(得分:1)

一个选项可能是匹配第一部分,然后使用捕获组来捕获括号之间的内容。然后确保后面是|#|IND

\(([^()]+)\).*?\|#\|IND

这将匹配

  • \(匹配(
  • ([^()]+)捕获与()不匹配的组
  • \)匹配)
  • .*?如果在最后一个右括号之后可以包含任何内容,则将其匹配
  • \|#\|IND匹配|#| IND

Regex demo | Python demo

如果最后一部分应该紧跟在右括号之后,请使用

\(([^()]+)\)\|#\|IND