gpt4 book ai didi

regex - 如何使用自定义词边界创建将获取 N 个词的 RegEx 模式?

转载 作者:行者123 更新时间:2023-12-02 03:23:12 40 4
gpt4 key购买 nike

我需要一个 RegEx 模式,它将使用自定义单词边界返回前 N 个单词,该边界是正常的 RegEx 空格 (\s) 加上标点符号,如 .,;:!?-*_

编辑 #1:感谢您的所有评论。

要清楚:

  1. 我想设置作为单词分隔符的字符
  2. 我们称其为“定界符集”或 strDelimiters
  3. strDelimiters = ".,;:!?-*_"
  4. nNumWordsToFind = 5
  5. 单词定义为不包含 strDelimiters 中任何字符的任何连续文本
  6. RegEx 单词边界是包含 strDelimiters 中的一个或多个字符的任何连续文本
  7. 我想构建 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>是要返回的单词数。

我也找到了这个word boundary pattern,但是不知道怎么用:

a "real word boundary" that detects the edge between an ASCII letter and a non-letter.

(?i)(?<=^|[^a-z])(?=[a-z])|(?<=[a-z])(?=$|[^a-z])

但是,我希望我的话也允许数字。

IAC,我无法使用上述自定义单词边界模式返回文本的前 N ​​个单词。

顺便说一句,我将在 Keyboard Maestro 中使用它宏。

有人可以帮忙吗?TIA。

最佳答案

你所要做的就是调整你的模式([\w]+\s+){<NumWordsOut>}到,包括一些特殊情况:

^[\s.,;:!?*_-]*([^\s.,;:!?*_-]+([\s.,;:!?*_-]+|$)){<NumWordsOut>}
1. 2. 3. 4. 5.
  1. 匹配第一个单词前任意数量的定界符
  2. 匹配一个词(= 至少一个非定界符)
  3. 单词后必须至少跟一个分隔符
  4. 或者它可以在字符串的末尾(以防末尾没有分隔符)
  5. 重复 2. 到 4.

请注意我是如何更改 - 的顺序的, 必须在开头或结尾,否则需要转义:\- .

关于regex - 如何使用自定义词边界创建将获取 N 个词的 RegEx 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888648/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com