我正在寻找一个可以匹配'didn't'
的Python正则表达式,并且只返回前面有撇号的字符,如't
,但不返回'd
或t'
在开头和结尾。
我尝试了(?=.*\w)^(\w|')+$
,但它只与开头的撇号相匹配。
更多例子:
'I'm'
应该只匹配'm
而不是'I
'Erick's'
应该只返回's
而不是'E
文本将始终以撇号开头和结尾,并且可以在文本中包含撇号。
答案 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
只显示了如何从字符串输入中获取多个字母字符。