python - 更好地使用 re 来避免重复传递

标签 python regex functional-programming repeat

关于如何改进这种方法有什么想法吗?

想法是保留连接连字符,但当它们单独存在时将其删除。 示例输出显示

def de_punctuate(xs):
    reg = re.findall(r"[\w'-]+", xs)
    #the pupose of `fun` is to only remove any hyphens that stand alone.
    #i want to keep hyphens-as-joining
    fun = functools.partial(operator.ne, '-')
    return filter(fun, reg)

def no_numbers(xs):
    isa = functools.partial(operator.contains, string.digits)
    fn = lambda x: ''.join(itertools.filterfalse(isa, x))
    return list(filter(fn, xs))

for d in data:
    print(d)
    print(no_numbers(de_punctuate(d)))

输出示例:

Turistguide fikk 40.000 kroner i bot for smugling
['Turistguide', 'fikk', 'kroner', 'i', 'bot', 'for', 'smugling']

- Må kalles opp etter Dale Oen
['Må', 'kalles', 'opp', 'etter', 'Dale', 'Oen']

Kvinne skadet i MC-ulykke ved Haugastøl
['Kvinne', 'skadet', 'i', 'MC-ulykke', 'ved', 'Haugastøl']

输出是我想要的。但我觉得改进的正则表达式会有所帮助!

我认为这看起来更干净一些:

def de_punctuate(xs):
    return re.findall(r"[\w']+(?:-[\w']+)*", xs)

def no_numbers(xs):
    return [ x for x in xs if not re.search(r'[0-9]', x) ]

最佳答案

尝试这样的事情:

re.findall(r"[\w']+(?:-[\w']+)*", myString)

为了

myString = "walk-the-dog can - i - --have -- a- -- look at your pocket-book?"

这会产生:

['walk-the-dog', 'can', 'i', 'have', 'a', 'look', 'at', 'your', 'pocket-book']

关于python - 更好地使用 re 来避免重复传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479871/

相关文章:

python - Django:扩展用户模型与创建用户配置文件模型

functional-programming - 硬件辅助垃圾收集

python - 在 Django Admin 中使用 DateTimeField 保存模型实例会丢失微秒分辨率

python - 在 python3、Anaconda 中导入 cv2 时出错

python - 在Python中追加列表的问题

php preg_split 第一个大写

python - 需要帮助理解带有正则表达式和 cURL 的 python 片段

java - 使用 hibernate bean 验证的密码验证

haskell - 为什么我的 Haskell 函数参数必须是 Bool 类型?

r - 当达到空白值时 Purrr 函数编程错误