我正在尝试提出一个将匹配以下字符串的 Ruby 正则表达式:
MAINT: Refactor something
STRY-1: Add something
STRY-2: Update something
但不应匹配以下内容:
MAINT: Refactored something
STRY-1: Added something
STRY-2: Updated something
MAINT: Refactoring something
STRY-3: Adding something
STRY-4: Updating something
基本上,:
之后的第一个单词不应以 ed
或 ing
结尾
这是我目前拥有的:
^(MAINT|(STRY|PRB)-\d+):\s([A-Z][a-z]+)\s([a-zA-Z0-9._\-].*)
我已经尝试过 [^ed]
和 [^ing]
但它们在这里不起作用,因为我的目标不仅仅是单个字符。
我无法想出一个合适的解决方案来实现这一目标。
最佳答案
你可以使用
^[-\w]+:\s*(?:(?!(?:ed|ing)\b)\w)+\b.+
分割如下:
^ # start of the line/string
[-\w]+:\s* # match - and word characters, 1+ then :
(?: # non-capturing group
(?!(?:ed|ing)\b) # neg. lookahead: no ed or ing followed by a word boundary
\w # match a word character
)+\b # as long as possible, followed by a boundary
.* # match the rest of the string, if any
我没有使用
Ruby
的经验,但我想您也可以进行拆分并检查第二个单词是否以 ed
或 ing
结尾。对于 future 的程序员/同事来说,后一种方法可能更容易处理。
关于Ruby 正则表达式过滤掉以 "string"后缀结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188358/