我正在拼命寻找Python中的正则表达式,仅使用
re
库。该表达式应将文本分成由任何语言的字母、数字和撇号组成的单个字符串。
例如:
"Test, this is a String 123!"
应该是:["Test", "this", "is", "a", "String", "123"]
"λάκιäsañ"
应该是:["λάκιäsañ"]
"not_underscores"
应该是:["not", "underscores"]
到目前为止我尝试过:
[\w\']+
这是一个类似
"included_Underscores"
的字符串,未分为 "included"
"underscores"
。
([^\W_]+(?:\')*)
这里是所有应该被识别的内容,但是
"'"
之后的字符被分开了
([\w\'](?<=[^_]))+
这里,单词的最后一个字符被分隔开
怎么样
import re
def splitIt(line: str) -> list[str]:
line = re.sub(r"[_]", " ", line)
line = re.sub(r"[^\w']+$", "", line)
line = re.sub(r"^[^\w']+", "", line)
res = re.split(r"[^\w']+", line)
return res
assert splitIt("Test, this is a String 123") == [
"Test",
"this",
"is",
"a",
"String",
"123",
]
assert splitIt("asdf λάκιäsañ 123") == [
"asdf",
"λάκιäsañ",
"123",
]
assert splitIt("not_underscores") == [
"not",
"underscores",
]
assert splitIt("not' underscores") == [
"not'",
"underscores",
]
\w
包含下划线。如果您想要不同的定义,则需要将其拼写出来。幸运的是,在这种情况下,很容易定义由任何非 \w
、非下划线字符或撇号组成的补语。
re.findall(r"(?:[^\W_]|')+", text)
演示:
>>> import re
>>> re.findall(r"(?:[^\W_]|')+", "Test, this is a String 123!")
['Test', 'this', 'is', 'a', 'String', '123']
>>> re.findall(r"(?:[^\W_]|')+", "λάκιäsañ")
['λάκιäsañ']
>>> re.findall(r"(?:[^\W_]|')+", "not_underscores")
['not', 'underscores']
>>> re.findall(r"(?:[^\W_]|')+", "don't worry, be happy")
["Don't", 'worry', 'be', 'happy']
一个明显的缺点是字符串周围的单引号也会被包含在内。
>>> re.findall(r"(?:[^\W_]|')+", "'scare quotes' are scary")
["'scare", "quotes'", 'are', 'scary']
有时它们也是单词的正确组成部分。
>>> re.findall(r"(?:[^\W_]|')+", "vi flytt' int'")
['vi', "flytt'", "int'"]