2024-05-16 21:48:42 发布
网友
我正在清理文本,我想删除所有连字符和特殊字符。除了两个单词之间的连字符,例如:tic-tacs,popcorn-flavoured
tic-tacs
popcorn-flavoured
我写了下面的正则表达式,但它删除了所有连字符
text='popcorn-flavoured---' new_text=re.sub(r'[^a-zA-Z0-9]+', '',text) new_text
我希望输出为:
作为替代方案,您可以在单词字符之间捕获连字符,并将该组保留在替换中。使用替换,可以匹配要删除的连字符
(\w+-\w+)|-+
解释
(\w+-\w+)
|
-+
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()获取与您的条件匹配的部分
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)是负前瞻
(?!\w)
(?<!\w)
作为替代方案,您可以在单词字符之间捕获连字符,并将该组保留在替换中。使用替换,可以匹配要删除的连字符
解释
(\w+-\w+)
捕获组1,匹配1+单词字符、连字符和1+单词字符|
或-+
匹配1+次连字符Regex demoPython demo
示例代码
输出
您可以使用
findall()
获取与您的条件匹配的部分与其他输入一起使用它
可以替换正则表达式的匹配项
使用空字符串
Regex demo<“”\_(ツ)_/'>;Python demo
正则表达式将匹配不在单词字符前面和后面的连字符
Python的正则表达式引擎执行以下操作
(?!\w)
是负前瞻;(?<!\w)
是负前瞻相关问题 更多 >
编程相关推荐