我正在尝试找到合适的正则表达式模式,这种模式允许我从逗号开始或以逗号结尾来挑出整个单词,但是省略数字。我想出了([\w]+,)
,它匹配第一个单词后面跟一个逗号,所以类似于:
红,1,黄色,4
红色,会匹配,但我正在尝试找到与以下内容匹配的解决方案:
红色, 1 ,黄色, 4
我一直无法找到任何可以像这样破坏的东西,但希望你能够提供帮助!
答案 0 :(得分:1)
这个正则表达式
,?[a-zA-Z][a-zA-Z0-9]*,?
匹配'单词'可选地用逗号括起来。逗号和“单词”之间不允许有空格,单词必须以字母数字开头。
请参阅here了解演示。
要确定至少有一个逗号匹配,请使用交替语法:
(,[a-zA-Z][a-zA-Z0-9]*|[a-zA-Z][a-zA-Z0-9]*,)
不幸的是,我所知道的没有正则表达式引擎支持级联匹配。但是,由于您通常在编程环境的上下文中使用regexen,因此可以重复匹配正则表达式并将匹配的子字符串用于进一步匹配。这可以通过使用特殊分隔符字符串链接或迭代函数调用来实现(必须保证不会出现在测试字符串中)。
示例(Javascript):
"red, 1 ,yellow, 4, red1, 1yellow yellow"
.replace(/(,?[a-zA-Z][a-zA-Z0-9]*,?)/g, "<$1>")
.replace(/<[^,>]+>/g, "")
.replace(/>[^>]+(<|$)/g, "> $1")
.replace(/^[^<]+</g, "<")
在此示例中,首先测试(简单)正则表达式。该调用返回由尖括号分隔的一系列初步匹配。不包含所需子字符串的匹配(在这种情况下为,
),所有干预材料都将被删除。
这种技术可能会生成比复杂的正则表达式更容易维护的代码。
然而,根据经验,如果你的正则表达式太复杂而不易维护,那么一个很好的猜测是它首先不是正确的工具(许多引擎提供x
匹配修饰符,允许你散布空格 - 即换行符和空格 - 以及随意的评论。)
答案 1 :(得分:1)
你的表达问题是:
- \w
解析为:[a-zA-Z0-9_]
。这包括您不想要的数字数据。
- 您最后有逗号,这将与foo,
匹配,但不会与,foo
匹配。
要解决此问题,您可以执行以下操作:(,\s*[a-z]+)|([a-z]+\s*,)
。有一个例子here。