如何使用正则表达式

时间:2016-08-24 12:01:21

标签: c# regex

我想从最后一秒Underscore截断字符串。 例如如果我的字符串是GroupOwner_1_2,我想断言_1_2并使用正则表达式仅获得GroupOwner作为结果。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

第一个任务是描述你想要匹配的部分:它是一个下划线,后跟零个或多个非下划线,然后是另一个下划线,还有一些非下划线,然后才能结束字符串。

它的正则表达式如下:

08-24 16:16:42.571 17660-17797/com.ionicframework.myapp696374 E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
08-24 16:16:44.528 17660-17746/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9f0a070
08-24 16:46:27.005 17660-17746/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9f3a6f8
08-24 16:46:59.288 13342-13509/com.ionicframework.myapp696374 E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
08-24 16:47:00.684 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9e4a678
08-24 16:47:17.422 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9eb4180
08-24 16:47:19.654 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9e37e70
08-24 16:47:20.813 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xba05be60
08-24 16:47:21.822 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9e5cc68
08-24 16:47:22.620 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb9e1b6f0
08-24 16:47:23.517 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xba12ef88
08-24 16:47:24.438 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xba05cb20
08-24 16:47:28.872 13342-13469/com.ionicframework.myapp696374 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xba1515f8

匹配它并用空字符串替换会从字符串中删除匹配的部分。

Demo 1.

您可以通过"折叠"进一步简化您的表达。相同的部分:

_[^_]*_[^_]*$

Demo 2.

答案 1 :(得分:1)

您可以使用LINQ而不是正则表达式:

var str = "GroupOwner_1_2";
var result = string.Join("_", str.Split('_').Reverse().Skip(2).Reverse());
// => GroupOwner

请参阅C# demo

str.Split('_')将字符串拆分为_的块,.Reverse()反转结果中的项目,.Skip(2)丢弃第一个(实际上是最后一个)块和{ {1}}将商品订单恢复为原始订单。 .Reverse()构建结果字符串。

请注意,如果您传递string.JoinGroupOwner12,则结果将为空字符串,因为输入中没有2个下划线。