0

尝试匹配此列表中的第三项:

/text word1, word2, some_other_word, word_4

我尝试使用这种 perl 风格的正则表达式无济于事:

([^, ]*, ){$m}([^, ]*), 

我只想匹配第三个单词,之前或之后都没有,也没有逗号或空格。我需要它是一个正则表达式,这不在程序中,而是在 UltraEdit 中用于 word 文件。

我可以用什么来匹配 some_other_word (或列表中的第三个。)

4

3 回答 3

2

根据社区成员的一些输入,我进行了以下更改以使正则表达式模式的逻辑更加清晰。

/^(?:(?:.(?<!,))+,){2}\s*(\w+).*/x

解释

 /^ # 1.- Match start of line.
 (?:(?:.(?<!,))+ # 2.- Match but don't capture a secuence of character not containing a comma ...
 ,)              # 3.- followed by a comma  
 {2}             # 4.- (exactly two times) 
 \s*             # 5.- Match any optional space
 (\w+)           # 6.- Match and capture a secuence of the characters represented by \w a leat one character long. 
  .*             # 7.- Match anything after that if neccesary.
  /x     

这是之前建议的。

/(?:\w+,?\s*){3}(\w+)/
于 2013-09-27T00:46:00.000 回答
1

尝试此正则表达式的第 1 组:

^(?:.*?,){2}\s*(.*?)\s*(,|$)

查看使用您的示例的现场演示,以及一个边缘案例,输入显示第 1 组中的捕获。

于 2013-09-27T02:49:24.313 回答
0

它不能一次只返回一个匹配项,因为您的字符串多次出现相同的模式并且Regular Expression没有选择性返回选项!所以你可以从返回的数组中做任何你想做的事情。

,\s?([^,]+)

看实际操作,第二个匹配组就是您所需要的。

于 2013-09-27T08:01:46.690 回答