Regex-Python~如果单词没有用单引号括起来,那么就把所有内容都放在中间

Regex-Python~如果单词没有用单引号括起来,那么就把所有内容都放在中间,python,Python,可能重复: 这就是我现在拥有的 found = re.match( r"hello[(](.*)[)]", word, re.M|re.I) 它将发现: Hello(here) and give you "here" 我希望它能够做到以下几点: Hello (Hi) 即使两边都有空格(但只有空格,而不是其他字符),也返回该值,因此将返回“Hi” 这将返回“Yes”,因为第一部分用单引号括起来,所以我们不使用单引号(如果可能的话,空格规则在这里仍然适用) 编辑: 只需首先删除

可能重复:

这就是我现在拥有的

found = re.match( r"hello[(](.*)[)]", word, re.M|re.I)
它将发现:

Hello(here)  and give you "here"
我希望它能够做到以下几点:

Hello  (Hi)     
即使两边都有空格(但只有空格,而不是其他字符),也返回该值,因此将返回“Hi”

这将返回“Yes”,因为第一部分用单引号括起来,所以我们不使用单引号(如果可能的话,空格规则在这里仍然适用)

编辑:


只需首先删除单引号内的所有内容:

>>> import re
>>> s = "'dfsfds Hello (Hi) fdfd' Hello (Yes)"
>>> s2 = re.sub(r"'[^']+'", '', s)
>>> re.search(r'hello\s*\(([^)]+)\)', s2, re.I|re.M).group(1)
'Yes'

它可能并不完美,但这似乎满足了您的用例。我觉得这是一个相当复杂的过程,再加上一些规则,它将开始处理正则表达式非常不擅长的问题类型

>>重新导入
>>>match_dict={'hello(here)'here',
…你好,你好,
…“'dfsfds Hello(Hi)fdfd'Hello(Yes)”:'Yes',
…“你好('hi)xx'):“你好)xx”,
…“你好('Hi'):'Hi'}
>>>对于s,在match_dict.iteritems()中的目标:
...     打印“输入:%s”%s
...     打印“目标:%s”%GOAL

... m=re.sub(r)(?我已经更新了一点问题,而且我得到了一个错误:AttributeError:'NoneType'对象没有属性'group'。这意味着正则表达式没有匹配任何内容。那么
Hello('hi)xx')
呢?括号内是否需要正确的引号匹配?Hello(554)会返回554个副本吗?这一个正在替换,这一个正在获得。另外,它们之间有差异。嗨,这工作得很好,但我犯了一个小错误,它应该区分大小写,所以Hello只在Hellosch as上工作,只查找使用“Hello”而不是“Hello”我认为您需要区分大小写,因为您使用的是
re、 我
。移除该标志后,您只需将“hello”更改为“hello”即可。太棒了,它可以正常工作。我只是想知道,如何将)括号更改为其他内容?可能更改为)A?我对正则表达式不太熟悉(显然).我试着编辑你的正则表达式,但没有成功。括号是什么意思?好像你想匹配Hello(stuff)A?@user1357159
 Hello  ('Hi')  would return 'Hi'   
>>> import re
>>> s = "'dfsfds Hello (Hi) fdfd' Hello (Yes)"
>>> s2 = re.sub(r"'[^']+'", '', s)
>>> re.search(r'hello\s*\(([^)]+)\)', s2, re.I|re.M).group(1)
'Yes'
>>> import re
>>> match_dict = {'hello(here)': 'here',
...                 'Hello   (Hi)': 'Hi',
...                 "'dfsfds Hello (Hi) fdfd' Hello (Yes)": 'Yes',
...                 "Hello ('hi)xx')": "hi)xx",
...                 "Hello  ('Hi')": 'Hi'}
>>> for s, goal in match_dict.iteritems():
...     print "INPUT: %s" % s
...     print "GOAL: %s" % goal
...     m = re.sub(r"(?<!\()'[^']+'", '', s, flags=re.I|re.M)
...     paren_quotes = re.findall(r"hello\s*\('([^']+)'\)", m, flags=re.I|re.M)
...     output = paren_quotes if paren_quotes else []
...     m = re.sub(r"hello\s*\('[^']+'\)", '', m, flags=re.I|re.M)
...     paren_matches = re.findall(r"hello\s*\(([^)]+)\)", m, flags=re.I|re.M)
...     if paren_matches:
...         output.extend(paren_matches)
...     print 'OUTPUT: %s\n' % output
... 
INPUT: 'dfsfds Hello (Hi) fdfd' Hello (Yes)
GOAL: Yes
OUTPUT: ['Yes']

INPUT: Hello  ('Hi')
GOAL: Hi
OUTPUT: ['Hi']

INPUT: hello(here)
GOAL: here
OUTPUT: ['here']

INPUT: Hello   (Hi)
GOAL: Hi
OUTPUT: ['Hi']

INPUT: Hello ('hi)xx')
GOAL: hi)xx
OUTPUT: ['hi)xx']