[英]regex to get “words” containing letters and (numbers/certain special), but not only numbers
[英]regex for words does not containing Cyrillic letters
我想从任何不包含至少一个西里尔字母的单词中清除字符串(单词我的意思是字符串的一部分被空格字符分割)
我试过line = re.sub(' *^[^а-яА-Я]+ *', ' ', line)
其中[а-яА-Я]
是一组西里尔字母,但是在处理字符串时
des поместья, de la famille Buonaparte. Non, je vous préviens que si vous
它返回
поместья, de la famille Buonaparte. Non, je vous préviens que si vous
而不仅仅是
поместья
一种选择是匹配 1 个或多个不在 а-яА-Я 范围内的字符,并排除添加[^а-яА-Я\s]+
匹配空白字符
负环视(?<!\S)
和(?!\S)
将空白边界断言到左侧和右侧。
替换为空字符串时,可能会有双倍间距,您必须将其替换为一个空格。
如果不想匹配结尾的逗号,可以使用 strip 并添加要删除的字符。
请参阅匹配的正则表达式演示。
例如:
import re
s = " des поместья, de la famille Buonaparte. Non, je vous préviens que si vous"
pattern = r"(?<!\S)[^а-яА-Я\s]+(?!\S)"
print(re.sub(pattern, "", s).strip(', '))
Output
поместья
您希望保留其中至少包含一个西里尔字符的任何非空白块。
您可以str.split()
字符串并使用unicodedata
检查是否至少有一个字符是西里尔字母,并且只保留这些“单词”:
import unicodedata as ud
result = ' '.join([word for word in text.split() if any('CYRILLIC' in ud.name(c) for c in word)])
print(result) # => поместья,
如果您还需要去除任何标点符号,请使用Best way to strip punctuation from a string中的任何解决方案:
import string
result = ' '.join([word.translate(str.maketrans('', '', string.punctuation)) for word in text.split() if any('CYRILLIC' in ud.name(c) for c in word)])
print(result) # => поместья
在线查看 Python 演示。 详情:
[word.translate(str.maketrans('', '', string.punctuation)) for word in text.split() if any('CYRILLIC' in ud.name(c) for c in word)]
- 列表理解那个
text.split()
将text
拆分为非空白块if any('CYRILLIC' in ud.name(c) for c in word)
- 条件检查word
是否包含至少一个西里尔字符word.translate(str.maketrans('', '', string.punctuation))
- 如果上述条件为True ,则获取word
并从中删除标点符号' '.join(...)
- 将列表项连接成单个空格分隔的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.