给定以下示例,我们如何将其解析为可能/可能不包含其他短语的组?
我们需要的:
(Text: any number of words) (LocationIndicator: 0 or 1 @) (Location: any number of words)
例子:
"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>=""
这个正则表达式可以满足我们的需要,但前提是我们包含 @ 短语:
^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*)))\s*$
如果我们排除 @ 短语,我们将找不到匹配项。换句话说,这无法匹配/分组:
"meet me":
<Text>="meet me"
<LocationIndicator>=""
<Location>=""
我们试过包括一个?在 LocationIndicator/Location 组之后,但将短语与文本分组:
^\s*(((?<Text>.*)?)\s*((?<LocationIndicator>(?:@)+?)\s*(?<Location>.*))?)\s*$
"meet me @home":
<Text>="meet me @home"
<LocationIndicator>=""
<Location>=""
我们如何用一个表达式匹配所有给出的示例?
注意:我们在 C# 中使用这些正则表达式