.net 我怎么能得到除“以外的一切?”;(?i)豪斯和x2B;(\d&"x2B;[-\s]?[a-zA-Z]?)\b";这

.net 我怎么能得到除“以外的一切?”;(?i)豪斯和x2B;(\d&"x2B;[-\s]?[a-zA-Z]?)\b";这,.net,regex,.net,Regex,使用下一个正则表达式,我可以得到地址街道的办公室或家庭号码: (?i)house\s+(\d+[-\s]?[a-zA-Z]?)\b 圣乔治378部门808住宅3 C及其他地址 结果是“房子3C”和它的完美。 但是现在我需要得到所有的东西,除了“3C号房子”。 例如,我需要得到: “圣乔治378部门808和其他地址” 没有“3号楼C” 我怎样才能得到这个?? 谢谢 单个正则表达式匹配必须是连续的;也就是说,它不能排除在比赛中间的一些文本。但是,您可以简单地执行替换,如下所示: var inpu

使用下一个正则表达式,我可以得到地址街道的办公室或家庭号码:

(?i)house\s+(\d+[-\s]?[a-zA-Z]?)\b 
圣乔治378部门808住宅3 C及其他地址

结果是“房子3C”和它的完美。 但是现在我需要得到所有的东西,除了“3C号房子”。 例如,我需要得到:

“圣乔治378部门808和其他地址”

没有“3号楼C”

我怎样才能得到这个??
谢谢

单个正则表达式匹配必须是连续的;也就是说,它不能排除在比赛中间的一些文本。但是,您可以简单地执行替换,如下所示:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var pattern = @"(?i)house\s+\d+[-\s]?[a-zA-Z]?\b\s*";
var output = Regex.Replace(input, pattern, "");
Console.WriteLine(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"
我在模式的末尾添加了
\s*
,以吞掉任何尾随空格。如果没有这一点,当我将结果合并在一起时,在
“808”
与“
之间会有两个空格


如果您不想这样做,大多数正则表达式引擎允许您根据找到的匹配项拆分字符串。结果通常是一个数组(或类似数组的结构),包含匹配周围字符串的部分,但不包括匹配本身(除非该选项已启用,具体取决于您使用的引擎)

最简单的解决方案是拆分字符串,然后将结果重新连接在一起

例如,这将在JavaScript中工作:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var output = input.split(/house\s+\d+[-\s]?[a-zA-Z]?\b\s*/i).join("");
console.log(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"
下面是C#中的一个工作示例:

请注意,在这两种情况下,我都放弃了该组,因为它不是必需的,但我也可以使用非捕获组,
(?…)
。在任何一种情况下,这都是必需的,因为在JavaScript和.NET中,如果在模式中有一个捕获组,那么结果集将包含匹配的组以及围绕整个模式的部分


如果您不喜欢,可以使用前导组和尾随组捕获整个字符串,然后将它们连接在一起:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var pattern = @"(.*)(?i)house\s+\d+[-\s]?[a-zA-Z]?\b\s*(.*)";
var match = Regex.Match(input, pattern);
var output = match.Groups[1].Value + match.Groups[2].Value;
Console.WriteLine(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"

单个正则表达式匹配必须是连续的;也就是说,它不能排除在比赛中间的一些文本。但是,您可以简单地执行替换,如下所示:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var pattern = @"(?i)house\s+\d+[-\s]?[a-zA-Z]?\b\s*";
var output = Regex.Replace(input, pattern, "");
Console.WriteLine(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"
我在模式的末尾添加了
\s*
,以吞掉任何尾随空格。如果没有这一点,当我将结果合并在一起时,在
“808”
与“
之间会有两个空格


如果您不想这样做,大多数正则表达式引擎允许您根据找到的匹配项拆分字符串。结果通常是一个数组(或类似数组的结构),包含匹配周围字符串的部分,但不包括匹配本身(除非该选项已启用,具体取决于您使用的引擎)

最简单的解决方案是拆分字符串,然后将结果重新连接在一起

例如,这将在JavaScript中工作:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var output = input.split(/house\s+\d+[-\s]?[a-zA-Z]?\b\s*/i).join("");
console.log(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"
下面是C#中的一个工作示例:

请注意,在这两种情况下,我都放弃了该组,因为它不是必需的,但我也可以使用非捕获组,
(?…)
。在任何一种情况下,这都是必需的,因为在JavaScript和.NET中,如果在模式中有一个捕获组,那么结果集将包含匹配的组以及围绕整个模式的部分


如果您不喜欢,可以使用前导组和尾随组捕获整个字符串,然后将它们连接在一起:

var input = "SAINT GEORGE 378 DEPARTMENT 808 HOUSE 3 C AND REST OF ADDRESS";
var pattern = @"(.*)(?i)house\s+\d+[-\s]?[a-zA-Z]?\b\s*(.*)";
var match = Regex.Match(input, pattern);
var output = match.Groups[1].Value + match.Groups[2].Value;
Console.WriteLine(output); // "SAINT GEORGE 378 DEPARTMENT 808 AND REST OF ADDRESS"

谢谢你的回答。你能更专业些吗?我所做的正是你所说的。在地址字段中拆分正则表达式。但在那个之后,我必须提取所有并没有被拆分的内容,在另一个字段中,包含其余不相关的地址。但是我不知道如何得到它。@Patricio我无法在不看到代码的情况下识别代码的错误。请显示您的代码并指定您正在使用的正则表达式引擎。我将.net与正则表达式一起使用,但结果与此相同。所以在regex101中工作对我来说很好。其思想是获得(?i)house\s+(\d+[-\s]?[a-zA-Z]?)\b的作品。谢谢@Patricio查看我的更新答案,了解使用C#的示例以及我如何更改代码的说明。如果这仍然不能解决您的问题,请通过编辑问题来显示您的代码。您好!谢谢你的帮助。但还是不行。我得到了同样的结果。请查看此链接。这里我用你的例子,但我仍然得到“house 3C”,而不是“SAINT GEORGE 378 DEPARTMENT 808 AND REST of ADDRESS”(没有house 3C)。非常感谢你!谢谢你的回答。你能更专业些吗?我所做的正是你所说的。在地址字段中拆分正则表达式。但在那个之后,我必须提取所有并没有被拆分的内容,在另一个字段中,包含其余不相关的地址。但是我不知道如何得到它。@Patricio我无法在不看到代码的情况下识别代码的错误。请显示您的代码并指定您正在使用的正则表达式引擎。我将.net与正则表达式一起使用,但结果与此相同。所以在regex101中工作对我来说很好。其思想是获得(?i)house\s+(\d+[-\s]?[a-zA-Z]?)\b的作品。谢谢@Patricio查看我的更新答案,了解使用C#的示例以及我如何更改代码的说明。如果这仍然不能解决您的问题,请通过编辑问题来显示您的代码。您好!谢谢你的帮助。但还是不行。我得到了同样的结果。请查看此链接。这里我用你的例子,但我仍然得到“house 3C”,而不是“SAINT GEORGE 378 DEPARTMENT 808 AND REST of ADDRESS”(没有house 3C)。非常感谢你!