我有一个字符串匹配模式只有一次
foo-bar-bat.bla
我想只匹配foo
我有缺陷的模式匹配都foo
和bar
\w+(?=-.*\.bla)
如何抛弃bar
?或者甚至更好,我怎么能在foo
之后停止匹配的东西?
我有一个字符串匹配模式只有一次
foo-bar-bat.bla
我想只匹配foo
我有缺陷的模式匹配都foo
和bar
\w+(?=-.*\.bla)
如何抛弃bar
?或者甚至更好,我怎么能在foo
之后停止匹配的东西?
您可以使用下面的模式(只要你的字符串总是格式化你说的样子):
^\w+(?=-.*\.bla)
的^
标志的开始处匹配串。因此将会取得字符串的第一个匹配。
?=
旨在确保以下组未被捕获但存在。
^[^-]+
起始^
装置开始从字符串的开头相匹配。字符组[^-]
意味着搜索任何不是破折号的东西。 +
表示该字符组应该一次或多次匹配一个字符。
可能在网站上的python版本太旧,但这太过宽容。问题中的正则表达式只搜索单词字符'\ w'('[A-Za-z0-9_]'),而允许所有类型的字符匹配。 – nhahtdh 2013-03-13 17:56:40
然后让它成为'^ \ w + -' – 2013-03-13 17:59:39
@mrhobo,那么你不匹配文件扩展名 – 2013-03-13 18:01:42
表达式的“。*”部分与“bar”匹配。
^\w+(?=-.*)
该表达式读作“在一个字符串的开头,至少一个字符之后(但在比赛中没有includeded),其次是任何一个DASH”
^ \w+ (?=-.*)
| | |
| | matches "-bar-bat.bla"
| matches "foo"
start of string
您可以停止第一场比赛后匹配(或者用'Matcher'或'replaceFirst'),还是我错过任何东西? – nhahtdh 2013-03-13 17:51:16
我之前的评论是关于Java的,但我认为在其他语言中有相同的构造可以在第一场比赛中停止。我的评论不适用的唯一情况是当你使用某种工具时。但是,如果您提供更多示例和上下文,那么总会有一些变通方法。 – nhahtdh 2013-03-13 18:01:22
foo和bar之间的关系是什么?酒吧需要在场吗? – 2013-03-13 18:01:49