Regex 在一个正则表达式中搜索几个替代项
我正在尝试创建一个正则表达式,该正则表达式将在几个选项中匹配字符串的开头Regex 在一个正则表达式中搜索几个替代项,regex,awk,Regex,Awk,我正在尝试创建一个正则表达式,该正则表达式将在几个选项中匹配字符串的开头 如果整个字符串不包含/,则匹配^[a-zA-Z\-] 如果字符串包含/,则匹配^[\w],直到第一次出现/ 示例: __Gi0__/0/0/0 __BVI__10 需要返回匹配项,因此我想将其包装在() 我试过这些 ([a-zA-Z]+)|([\-\w]{2,}/) 但与第二种情况不符 有什么建议吗 我的awk版本是GNU awk 4.0.0您只需按以下方式操作即可: ^((\w+)\/|([a-zA-Z-]+) 第二
/
,则匹配^[a-zA-Z\-]
/
,则匹配^[\w]
,直到第一次出现/
__Gi0__/0/0/0
__BVI__10
需要返回匹配项,因此我想将其包装在()
我试过这些
([a-zA-Z]+)|([\-\w]{2,}/)
但与第二种情况不符
有什么建议吗
我的awk版本是GNU awk 4.0.0您只需按以下方式操作即可:
^((\w+)\/|([a-zA-Z-]+)
第二个捕获的组包含您想要的内容
或者按照@Jenny的建议,您可以按如下方式将第一组设置为非捕获:
^((\w+)\/(a-zA-Z-)
但如果字符串中没有
/
,则数字不应匹配。请注意,字符串中不存在空格您的答案有效,但/
也包含在我的捕获组中,这是我不想要的。@Dharman,请注意,正如我在回答中所述。第二个捕获的组\2或$2将包含您想要的字符串。此问题已标记为awk
,但接受的解决方案在大多数awk中不起作用,因为\w
是特定于gawk的。第二个带有?:
,表示某些东西在任何awk中都无法工作。为什么不直接使用POSIX字符类^([[:alnum:][u]+)\/\ 124;([[:alpha:][u-]+)
?另外,需要返回匹配,所以我想把它包装成()
只在调用gensub()和gawk match()时才有意义,所以希望这就是您使用re的地方。您需要包含有关awk
版本的更多信息。如果您在AIX或旧Unix上运行,我们也需要知道这一点。祝你好运(如你所知,最好用这些信息编辑你的问题)。dew提示了你使用的正则表达式:它不是锚定的,因此第一组将匹配斜杠之前的所有内容,而第二组将永远不会使用。还要注意的是,在字符范围内[]
不必转义特殊字符(除了]
)。您所说的是什么意思?需要返回匹配项
?没有返回与RE匹配的字符串的awk函数或语言构造(例如,替换字符串中的某些文本或填充数组)。有一些函数可以通过匹配的RE执行其他操作,因此如果您提供更多信息,我们可以帮助您找到最佳解决方案。此外,为这些类型的问题提供解决方案的问题永远不会匹配您想要的,也不会匹配您不想要的,因此发布更有趣的输入和预期的输出,否则您可能会得到错误的“解决方案”。@Ed Morton我使用的是gawk,gawk中的匹配函数能够填充数组。sshashank124理解我的问题,并提供了我需要的答案,因此我认为我不需要提供更多的输入。