由管道字符分隔的字符串的正则表达式

时间:2013-11-15 07:27:06

标签: ruby regex

我遇到了一些与以下字符串中匹配class1class2class3的正则表达式有关的问题(理想情况下我可以 n 由管道分隔的单词数,因为传递给我方法的类数不是常数)

class1|class2|class3 path/to/resource

我有以下匹配器,只返回class1。奖金指向任何人都可以找到资源路径的匹配器。

修改

非常感谢你们所有的帮助 - 各地点!

5 个答案:

答案 0 :(得分:2)

假设您确信您的输入结构良好,我的建议是通过管道字符和空格分割字符串。例如:

components = "class1|class2|class3 path/to/resource".split(/[ \|]/)

然后,您可以访问包含n个组件的数组,后跟您可以操作访问的资源路径。

resourcePath = components.pop()
classes = components

编辑:最初的主题是OP建议使用Ruby,因此我的回答。

答案 1 :(得分:1)

\w+(\|\w+)*\s+\w+(\/\w+)*

我假设您的类的名称由一个或多个单词字符组成。调整是否比这更受限制。例如,仅对编号类使用class\d+

我们有一个类名,后跟任意数量的[管道后跟类名]。然后我们有一个或多个空格,后面跟着基本相同的东西,但这次使用斜杠而不是管道 我用反斜杠逃脱了管道和斜线。

答案 2 :(得分:1)

string = "class1|class2|class3 path/to/resource".split(%r{[| ]})

=> [“class1”,“class2”,“class3”,“path / to / resource”]

答案 3 :(得分:1)

如果要将regex与您提供的输入一起使用,这将提取您的类和路径:

([\w/]+)\|? ?

<强> INPUT

class1|class2|class3 path/to/resource

<强>输出

class1
class2
class3
path/to/resource

答案 4 :(得分:1)

我只会做两次分裂:

string = 'class1|class2|class3 path/to/resource'

p string.split.first.split('|') #=> ["class1", "class2", "class3"]