样品:
[Foo][Bar]Foo bar foo bar: foo; bar: foo bar foo bar __
[Foo][Bar]Foo; **b**ar: foo bar __ foo bar foo bar
[Foo]Foo bar foo bar foo bar: foo __ bar; foo bar __ foo bar
[Bar]Foo; **b**ar; **f**oo
例如,我有一个像上面这样的字符串格式。
我想问的是,如何得到;
上的冒号之后的字母(不是空格或白色空格),但在第一个冒号:
之前?
如果可能的话,我想用正则表达式一步标记字母
我想得到的字母用粗体标出
- 作为补充信息,我想将字母改为。
2条答案
按热度按时间bhmjp9jg1#
使用两个查找范围从要匹配的字符中排除周围环境:
试试on regex101.com。
[^:]
、;
、\s
和[^\s:]
从不匹配冒号,所以lookahead中的冒号匹配 iff 它是该行的第一个冒号。如果没有冒号,我们简单地回退到行尾,因此允许主表达式匹配。正则表达式需要有多行修饰符(
(?m)
/RegexOptions.Multiline
)。我不知道VB.NET,但下面的代码段似乎可以工作:试试on ideone.com。
o4hqfura2#
^
-行锚的起点[^;:]*
-匹配;
和:
以外的任何对象零次或多次;
-匹配文字;
\s*
-匹配零个或多个空格(.)
-捕获一个字符.*
-匹配任何字符零次或多次:
-匹配文本冒号Demo
由于您还说希望在
[Bar]Foo; bar; foo
中捕获b
和f
,因此实际上似乎不需要冒号。下面是一个捕获
b
和f
的例子:^
-线路锚起点(?:
-非捕获组的开始[^;:]*
-除了;
和:
之外的任何字符匹配零次或多次;
-匹配文字;
\s*
-零次或多次匹配空白(.)
-捕获一个字符。如果不允许它是:
,则替换为([^:])
)
-非捕获组的结束+
-匹配非捕获组1次或更多次Demo