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

ne5o7dgx  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(74)

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

  • 输入字符串:"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+|[^\w\s]+| ").allMatches(string)
  • RegExp(r"[\w']+|[.,!?; ]").allMatches(string)
  • string.split(RegExp(r"(?=[.\s]|\b)"))
byqmnocz

byqmnocz1#

你可以建立在这样的东西上:

(
   (?<word>\w+(?:'\w+)*) |
   (?<ws>\s+) |
   (?<punc>[?:;.,'"()])
)

https://regex101.com/r/jJbFQd/1

uajslkp6

uajslkp62#

你可以试试这样的方法:

/[!?;:,. '"]|\w+(?:'\w+)*/gm

它将首先尝试匹配括号中的其中一个,然后尝试匹配以下任何一个:

  • 任何单词字符,后跟',后跟任何单词字符。
  • 任何单词字符

可以检查上面的模式是否有效。任何失踪案件,请随时联系。
https://regex101.com/r/iKk5Gc/1

相关问题