单词的正则表达式不包含西里尔字母
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
它returns
поместья, de la famille Buonaparte. Non, je vous préviens que si vous
而不仅仅是
поместья
一个选项是匹配 1 次或多次不在 а-яА-Я 范围内的字符,同时排除匹配的白色 space 字符添加 [^а-яА-Я\s]+
负环视 (?<!\S)
和 (?!\S)
向左和向右断言白色 space 边界。
替换为空字符串时,可能会有双 spaced 间隙,您必须将其替换为单个 space.
如果不想匹配结尾的逗号,可以使用 strip 并添加要删除的字符。
查看匹配项 regex demo。
例如:
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(', '))
输出
поместья
您想保留任何 non-whitespace 个至少包含一个西里尔字符的块。
您可以 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 demo online。 详情:
[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
分成 non-whitespace 个块
if any('CYRILLIC' in ud.name(c) for c in word)
- 条件检查 word
是否包含至少一个西里尔字符
word.translate(str.maketrans('', '', string.punctuation))
- 如果上述条件为 True,则采用 word
并从中去除标点符号
' '.join(...)
- 将列表项连接成一个 space-separate 字符串。
我想从不包含至少一个西里尔字母的任何单词中清除字符串(单词我的意思是字符串的一部分被空格字符分割)
我试过 line = re.sub(' *^[^а-яА-Я]+ *', ' ', line)
其中 [а-яА-Я]
是一组西里尔字母,但是在处理字符串时
des поместья, de la famille Buonaparte. Non, je vous préviens que si vous
它returns
поместья, de la famille Buonaparte. Non, je vous préviens que si vous
而不仅仅是
поместья
一个选项是匹配 1 次或多次不在 а-яА-Я 范围内的字符,同时排除匹配的白色 space 字符添加 [^а-яА-Я\s]+
负环视 (?<!\S)
和 (?!\S)
向左和向右断言白色 space 边界。
替换为空字符串时,可能会有双 spaced 间隙,您必须将其替换为单个 space.
如果不想匹配结尾的逗号,可以使用 strip 并添加要删除的字符。
查看匹配项 regex demo。
例如:
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(', '))
输出
поместья
您想保留任何 non-whitespace 个至少包含一个西里尔字符的块。
您可以 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 demo online。 详情:
[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
分成 non-whitespace 个块if any('CYRILLIC' in ud.name(c) for c in word)
- 条件检查word
是否包含至少一个西里尔字符word.translate(str.maketrans('', '', string.punctuation))
- 如果上述条件为 True,则采用word
并从中去除标点符号
' '.join(...)
- 将列表项连接成一个 space-separate 字符串。