我想用一个regex行将某个模式与几个字符串匹配(如果可能):
blah blah (1023 mega lbs) blah blah 1245 tons
blah 1023 kilo tons blah blah 1034 metric tons
blah 1023 feet 345 blah
$100 is a lot of money
我想匹配1023和它的单位(磅、吨和英尺),它们可能跟在另一个单词后面,并将其存储为另一个字符串。但是,我必须小心100美元,因为它不是我所关心的度量单位,也不是任何可能跟在这行第一个序列后面的数字。在
我当前的方法有很多嵌套的if statements
,例如,对于我的第一行(不起作用):\d*\s(.*)\s\w+
有更好的方法吗?在
您可能喜欢使用regex测试程序,例如http://regexpal.com/或{a2}。在
您遇到了一个问题,因为中间的
(.*)
将贪婪地匹配并最终捕获比您预期的更多的内容。见here。在注意,我的解决方案应该匹配
<number> <scale> <unit>
的所有实例,而不仅仅是每行的第一个实例。我把它留给后人。在在这里,它在起作用,link。在
(?:[^0-9$]|^)
表示匹配要么从行首开始,要么前面不是数字或美元符号(?:
表示我们不想捕捉它)。然后匹配数字\d+
,后面跟着两个单词\w+
。你可以用更具描述性的匹配来代替\w+
,就像perreal的回答一样。在输出
^{pr2}$另外,如果您有一个类似
$100 money is too much for 100 lbs
的行,则可以使用以下命令:为了配合千斤重的东西:
输出
可以将这些单元和修饰符存储在列表中,并将它们与
|
连接起来,以动态创建regex。在匹配所有可能的单位修饰符的示例:
输出
相关问题 更多 >
编程相关推荐