我需要一个正则表达式模式,它将使用自定义单词边界返回前 N 个单词,该边界是正常的正则表达式空格 (\s) 加上标点符号.,;:!?-*_
编辑#1:感谢您的所有评论。
要清楚:
- 我想设置作为单词分隔符的字符
- 让我们称之为“分隔符集”或 strDelimiters
strDelimiters = ".,;:!?-*_"
nNumWordsToFind = 5
- 单词被定义为不包含 strDelimiters 中任何字符的任何连续文本
- RegEx 单词边界是包含 strDelimiters 中的一个或多个字符的任何连续文本
- 我想构建 RegEx 模式以使用 strDelimiters 获取/返回第一个 nNumWordsToFind。
编辑#2:2015 年 8 月 8 日星期六,美国中部时间上午 12:49
@maraca 肯定回答了我最初所说的问题。但我真正需要的是返回字数≤nNumWordsToFind。因此,如果源文本只有 3 个单词,但我的 RegEx 要求 4 个单词,我需要它返回 3 个单词。如果 nNumWordsToFind > 源文本中的实际单词数,则 maraca 提供的答案失败。
例如:
one,two;three-four_five.six:seven eight nine! ten
它会将其视为 10 个单词。如果我想要前 5 个单词,它将返回:
one,two;three-four_five.
我使用正常的 \s 空格有这个模式,它有效,但不完全是我需要的:
([\w]+\s+){<NumWordsOut>}
其中<NumWordsOut>
是要返回的单词数。
我也找到了这个词边界模式,但我不知道如何使用它:
检测 ASCII 字母和非字母之间的边缘的“真实单词边界”。
(?i)(?<=^|[^a-z])(?=[a-z])|(?<=[a-z])(?=$|[^a-z])
但是,我希望我的话也允许数字。
IAC,我无法使用上述自定义单词边界模式返回文本的前 N 个单词。
顺便说一句,我将在Keyboard Maestro宏中使用它。
任何人都可以帮忙吗?TIA。