只在字符串中寻找匹配撇号的正则表达式

时间:2016-08-04 05:07:43

标签: python regex

我正在寻找一个可以匹配'didn't'的Python正则表达式,并且只返回前面有撇号的字符,如't,但不返回'dt'在开头和结尾。

我尝试了(?=.*\w)^(\w|')+$,但它只与开头的撇号相匹配。

更多例子:

'I'm'应该只匹配'm而不是'I

'Erick's'应该只返回's而不是'E

文本将始终以撇号开头和结尾,并且可以在文本中包含撇号。

1 个答案:

答案 0 :(得分:1)

这是bunch of possible solutions

import re

s = "'didn't'"
print(s.strip("'")[s.strip("'").find("'")+1])
print(re.search(r'\b\'(\w)', s).group(1))
print(re.search(r'\b\'([^\W\d_])', s).group(1))
print(re.search(r'\b\'([a-z])', s, flags=re.I).group(1))
print(re.findall(r'\b\'([a-z])', "'didn't know I'm a student'", flags=re.I))

在剥离前导/尾随撇号后,s.strip("'")[s.strip("'").find("'")+1]获取第一个'之后的字符。

re.search(r'\b\'(\w)', s).group(1)解决方案获取(即[a-zA-Z0-9_],可以从此处调整)char之后的'前面有一个字char(由于\b字边界。)

re.search(r'\b\'([^\W\d_])', s).group(1)几乎与上述解决方案完全相同,它只提取字母字符,因为[^\W\d_]匹配除非字,数字和{{之外的任何字符1}}。

请注意,_解决方案与上面的解决方案完全相同,但您无法通过re.search(r'\b\'([a-z])', s, flags=re.I).group(1)使其识别Unicode。

最后一个re.UNICODE只显示了如何从字符串输入中获取多个字母字符。