我如何将一个字符串一个字符串分成单词,标点和空格的列表?(考虑到撇号)



如何使用正则表达式将字符串拆分为单词,标点符号和空格?

的例子:

  • 输入字符串:"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

相关内容

  • 没有找到相关文章

最新更新