首页 > 解决方案 > 如何在正则表达式匹配中包含撇号

问题描述

该函数需要创建首字母缩略词。示例输入-GNU 图像处理程序。output-GIMP Input-先进先出 output-FIFO Input-哈雷彗星输出-HSC,不过应该是HC 代码如下

def abbreviate(words):
    acroynm=''
    b=words.replace('_', '')
    d=re.findall(r'\w+|^\s',b)
    for char in d:
        acroynm+=(char[0])
    return acroynm.upper()

问题是正则表达式不包含撇号,并将撇号后面的其余单词作为一个单独的单词。

如何更改正则表达式代码以便包含撇号?

标签: regexpython-3.x

解决方案


那是你要的吗:

import re

arr = [
    'GNU Image Manipulation Program',
    'First In, First Out',
    'ab\'c def',
]

def abbreviate(words):
    L = re.findall(r'(?<!\S)([a-zA-Z])', words)
    return "".join(L).upper()

for s in arr:
    print abbreviate(s)

输出:

GIMP
FIFO
AD

正则表达式解释:

(?<!\S)         # negative lookbehind, zero length assertion that checks there is no non-spaces before 
                   # (it means there can be a space or beginning of string)
([a-zA-Z])      # group 1, a letter

推荐阅读