我想从最后一秒Underscore截断字符串。 例如如果我的字符串是GroupOwner_1_2,我想断言_1_2并使用正则表达式仅获得GroupOwner作为结果。
有人可以帮我吗?
答案 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
匹配它并用空字符串替换会从字符串中删除匹配的部分。
您可以通过"折叠"进一步简化您的表达。相同的部分:
_[^_]*_[^_]*$
答案 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.Join
或GroupOwner12
,则结果将为空字符串,因为输入中没有2个下划线。