首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何实现正则表达式来解析和分组字符串中可能排除或不排除特定短语的部分?

我们如何实现正则表达式来解析和分组字符串中可能排除或不排除特定短语的部分?
EN

Stack Overflow用户
提问于 2012-05-10 03:45:49
回答 1查看 93关注 0票数 1

给定以下示例,我们如何将其解析为可能包含/可能不包含其他短语的组?

我们需要的是:

代码语言:javascript
复制
    (Text: any number of words) (LocationIndicator: 0 or 1 @) (Location: any number of words)

示例:

代码语言:javascript
复制
    "meet me @home":
            <Text>="meet me"
            <LocationIndicator>="@"
            <Location>="home"
    "meet me in the kitchen @home":
            <Text>="meet me in the kitchen"
            <LocationIndicator>="@"
            <Location>="home"
    "     meet me       @      home      ":
            <Text>="meet me"
            <LocationIndicator>="@"
            <Location>="home"
    "meet me":
            <Text>="meet me"
            <LocationIndicator>=""
            <Location>=""

这个正则表达式做了我们需要做的事情,但前提是我们要包含@短语:

代码语言:javascript
复制
    ^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*)))\s*$

如果我们排除@短语,我们将得不到任何匹配。换句话说,这无法匹配/分组:

代码语言:javascript
复制
    "meet me":
            <Text>="meet me"
            <LocationIndicator>=""
            <Location>=""

我们已经尝试包括一个?在LocationIndicator/Location组之后,但这会将短语与文本分组:

代码语言:javascript
复制
    ^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*))?)\s*$

    "meet me @home":
            <Text>="meet me @home"
            <LocationIndicator>=""
            <Location>=""

我们如何用一个表达式匹配所有给出的例子?

注意:我们在C#中使用这些正则表达式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-10 04:14:50

添加?后,您的方向是正确的。此外,您需要做的是(至少)将第一个通配符.*替换为排除您的位置指示符的内容,例如[^@]*

编辑:我简化了您的表达式(有一些额外的括号和一个不必要的非贪婪的-fier),并对其进行了测试。

代码语言:javascript
复制
^\s*(?<Text>[^@]*)?\s*(?:(?<LocationIndicator>[@]+)\s*(?<Location>.*))?\s*$

参见http://rubular.com/r/C5lfx9cvtZ

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10523055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档