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']