如何使用正则表达式将字符串拆分为单词,标点符号和空格?
的例子:
- 输入字符串:
"One day you're going to 'solve' this problem"
- 输出列表:
["One", " ","day"," ","you're"," ","going"," ","to"," ","'","solve","'"," ","this","problem"]
我已经看了这个问题的完整答案列表,但是它们都有一些不足之处:
- 不匹配带有撇号的单词,例如
you're
- 匹配带有撇号的单词,但也匹配后跟撇号的单词,例如
'This is a cat'
- 不是一个通用的解决方案(创建一个正则表达式与示例字符串中的特定标点符号一起工作,但不能与所有标点符号一起工作)。
的例子,我已经尝试了,几乎工作,但不完全:
RegExp(r"w+|[^ws]+| ").allMatches(string)
RegExp(r"[w']+|[.,!?; ]").allMatches(string)
string.split(RegExp(r"(?=[.s]|b)"))
您可以这样构建:
(
(?<word>w+(?:'w+)*) |
(?<ws>s+) |
(?<punc>[?:;.,'"()])
)
https://regex101.com/r/jJbFQd/1
您可以尝试这样做:
/[!?;:,. '"]|w+(?:'w+)*/gm
它将首先尝试匹配括号中的其中一个,然后尝试匹配以下任意一个:
- 任意单词字符后跟
'
再后跟任意单词字符。 - 任意字符
可以检查上面的模式是否正常工作。如有遗失物品,请与我们联系。
https://regex101.com/r/iKk5Gc/1