正则表达式删除除两个单词之间的所有连字符

2024-05-16 21:48:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在清理文本,我想删除所有连字符和特殊字符。除了两个单词之间的连字符,例如:tic-tacspopcorn-flavoured

我写了下面的正则表达式,但它删除了所有连字符

text='popcorn-flavoured---'
new_text=re.sub(r'[^a-zA-Z0-9]+', '',text)
new_text 

我希望输出为:

popcorn-flavoured


Tags: text文本renewtic字符单词popcorn
3条回答

作为替代方案,您可以在单词字符之间捕获连字符,并将该组保留在替换中。使用替换,可以匹配要删除的连字符

(\w+-\w+)|-+

解释

  • (\w+-\w+)捕获组1,匹配1+单词字符、连字符和1+单词字符
  • |
  • -+匹配1+次连字符

Regex demoPython demo

示例代码

import re

regex = r"(\w+-\w+)|-+"
test_str = ("popcorn-flavoured---\n"
    "tic-tacs")

result = re.sub(regex, r"\1", test_str)
print (result)

输出

popcorn-flavoured
tic-tacs

您可以使用findall()获取与您的条件匹配的部分

new_text = re.findall('[\w]+[-]?[\w]+', text)[0]

与其他输入一起使用它

可以替换正则表达式的匹配项

-(?!\w)|(?<!\w)-

使用空字符串

Regex demo<“”\_(ツ)_/'>;Python demo

正则表达式将匹配不在单词字符前面和后面的连字符

Python的正则表达式引擎执行以下操作

-        match '-'
(?!\w)   the previous character is not a word character
|
(?<!\w)  the following character is not a word character
-        match '-'

(?!\w)负前瞻(?<!\w)负前瞻

相关问题 更多 >