Regex 从文本中删除关键字以生成逗号分隔的列表

Regex 从文本中删除关键字以生成逗号分隔的列表,regex,coldfusion,Regex,Coldfusion,我有一些这样的文字: MAP land id|name, MAP region id|name|active, name, code,valid COLLECTION:Group1 我使用这个正则表达式来删除某些单词,如“MAP”、“Collection”以及管道分隔的单词 rEReplaceNoCase( data,"map|collection:|\s+|([[:alnum:]]+\|){1,}[[:alnum:]]*", ",", "ALL" ) 结果应该是剩余单词的逗号分隔列表。但

我有一些这样的文字:

MAP land id|name, MAP region id|name|active, name, code,valid
COLLECTION:Group1
我使用这个正则表达式来删除某些单词,如“MAP”、“Collection”以及管道分隔的单词

rEReplaceNoCase( data,"map|collection:|\s+|([[:alnum:]]+\|){1,}[[:alnum:]]*", ",", "ALL" ) 
结果应该是剩余单词的逗号分隔列表。但是,这是正则表达式产生的结果:

,,,land,,,,,,region,,,,,,name,,code,valid,,Group1, 

有没有办法去掉不必要的逗号?

Coldfusion通常会忽略列表中的空元素。我怀疑如果你输出listlen(你的结果),你会得到6。因此,只要您将结果视为一个列表——在其上使用list函数,使用cfloop list在其上循环,等等——您就不需要删除这些空元素。如果在coldfusion中将其作为字符串处理、输出或将其传递给另一个编程上下文等,那么可能需要删除额外的逗号。您可以通过将其转换为数组并再次转换来完成此操作(因为转换它是一个列表函数,因此会忽略空元素):


Coldfusion通常会忽略列表中的空元素。我怀疑如果你输出listlen(你的结果),你会得到6。因此,只要您将结果视为一个列表——在其上使用list函数,使用cfloop list在其上循环,等等——您就不需要删除这些空元素。如果在coldfusion中将其作为字符串处理、输出或将其传递给另一个编程上下文等,那么可能需要删除额外的逗号。您可以通过将其转换为数组并再次转换来完成此操作(因为转换它是一个列表函数,因此会忽略空元素):



您正在使用
,“
作为替换文本,将…
,”,“ALL”)
更改为
,“ALL”)
我想您可以使用:
重新替换数据库(数据,,+,,,,,,,,“ALL”)
有没有更好的方法去除不必要的逗号查找
,+
替换
请指定所需的结果,以便清楚哪些逗号是不必要的。使用两步方法,您不能在Coldfusion正则表达式中使用条件替换模式。您正在使用
,“
作为替换文本,将…
,“,”ALL“
更改为
,”ALL”)
我想您可以使用:
重新替换数据库(数据,“,+”,“,”,“全部”)
是否有更好的方法去除不必要的逗号
查找
,+
替换
请指定所需的结果,以便清楚哪些逗号是不必要的。使用两步方法,您不能在Coldfusion正则表达式中使用条件替换模式。这是一个很好的观察结果。尽管在这个特定的se,他们真的应该修复正则表达式,因为用
替换不需要的单词,首先会导致所有额外的逗号:-)@Leigh-这是一个公平的观点!但是,我认为如果在原始逗号分隔列表中有两个管道分隔的条目,例如“my,list”看起来像| this,Leigh“无论如何,你会得到额外的逗号。。。(我的,,,李)?如果仍然需要删除空元素的解决方案,那么在replacenocase中使用逗号是不合适的。我不是正则表达式大师,所以我可能遗漏了一些东西。:)对于CF忽略空列表元素的默认行为的概念没有任何异议。然而,由于一个不好的表达是问题的原因,它感觉就像一个创可贴IMO RE:结束额外逗号ReEX的不是我的力量,但…我敢肯定,这个问题可以用正确的表达式来处理。我可能会使用多种表达式,但正则表达式大师几乎肯定会想出更好的方法;-)这是一个很好的观察。尽管在这种特殊情况下,他们确实应该修复正则表达式,因为用
替换不需要的单词,首先是导致所有额外逗号的原因:-)@Leigh-这是一个公平的观点!但是,我认为,如果在原始的逗号分隔列表中有两个管道分隔的条目,例如“my,list |看起来像| this,Leigh”,那么无论如何,您都会得到额外的逗号。。。(我的,,,李)?如果仍然需要删除空元素的解决方案,那么在replacenocase中使用逗号是不合适的。我不是正则表达式大师,所以我可能遗漏了一些东西。:)对于CF忽略空列表元素的默认行为的概念没有任何异议。然而,由于一个不好的表达是问题的原因,它感觉就像一个创可贴IMO RE:结束额外逗号ReEX的不是我的力量,但…我敢肯定,这个问题可以用正确的表达式来处理。我可能会使用多种表达式,但正则表达式大师几乎肯定会想出更好的方法;-)
<cfset temparray = listtoarray(yourresult)>
<cfset yourresult = arraytolist(temparray)>