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理解我的问题,并提供了我需要的答案,因此我认为我不需要提供更多的输入。