【发布时间】:2017-02-03 07:48:02
【问题描述】:
我需要匹配字符串中可能包含符号的单词,既在单词中也作为标点符号。示例字符串可能是:
This string's is a good example of situation I'll fail to match - due to punctuations being all over the place.
忽略那句奇怪的英语,我有一个案例,我需要匹配每个单词,而不是标点符号,除非它是单词的一部分。所以我的结果应该是
- 这个
- 字符串(匹配
's,因为它是单词的一部分) - 是
- 一个
- 好
...
- 我会(将
'll与 I 匹配,因为它是单词的一部分) - 失败
- 到
- 匹配
- 到期(跳过
-) - 到
...
- place(没有句号,因为它不是单词的一部分。)
我设法想出了两个部分有效但都不能按我想要的方式工作的正则表达式
(?<=\\s|^)[A-Za-z0-9]+?(?=\\s|$) - I am using swift so `\\s` is for whitespace
这匹配普通单词,但不匹配 string's 这样的情况,因为单词中有 '。但如果我使用我的其他表达方式:
(?<=\\s|^).+?(?=\\s|$)
它匹配string's,但也匹配-和句尾的句号,如place.
是否有一个表达式可以匹配带有标点符号但不单独标点符号的单词?我不介意是否需要多个表达式来捕获所有结果,我可以在显示之前合并结果。
注意:除了给出的示例之外,我知道的标点符号既可以作为单词的一部分存在,也可以不包括-'().,而仅作为单词一部分的标点符号包括@ 987654336@ $ # & / 可以假定任何其他标点符号永远不会成为任何单词的一部分。 ! ? " : 应在单词中出现或不出现空格,但不得与结果匹配。
幸运的是,可以安全地假设该字符串仅包含字母数字和标点符号 - 可以假设其他语言字符和符号,如 <>{}[]| 或 +*= 不会出现在字符串中 - 还有一些其他符号适合我现在无法预测的四组符号之一,但我相信如果我能得到一个可行的逻辑,我可以调整它以在每组中包含更多符号。
【问题讨论】: