我有例子
Term:a=27 B=90 C=65
....我只希望价值C
和A
,C
首先和A
秒
我做了
(C=(\d+)^|A=(\d+))
但没有成功
为什么
请
答案 0 :(得分:1)
通常,您不应该关心匹配参数的设置顺序,因为您可以在周围的代码中更改它们。要进行这种“正常”匹配,你需要这样的东西:
a=(\d+)\s+B=\d+\s+C=(\d+)
你的表达式正在寻找C =位或a =位:它不会同时匹配两者。另外,正如上面所指出的,“^”也无济于事。
我不知道在正则表达式引擎中切换匹配的任何简单方法。有趣地使用正面的后置(在C位匹配后寻找一点,但我不知道匹配变量的顺序在这种情况下是如此明确定义)可能是可能的,但它肯定是可以在周围的代码中。实现这一点的一种紧凑(丑陋且可能不安全)的方法是滥用像perl这样的eval函数来重写匹配变量的名称。这对我有用:
eval(s/a=(\d+) B=\d+ C=(\d+)/\$1=$2 \$2=$1/);
print "$1 \n"; #gives 65
print "$2 \n"; #gives 27
为了提供更具体的解决方案,我们需要了解有关正则表达式周围系统的更多信息。我怀疑任何'纯'正则表达式都是可移植的,或者是严格规则的。
答案 1 :(得分:1)
在你的正则表达式中你使用^符号,这表示字符串的开头,所以“c =(\ d +)^”将从不匹配,是不是试图匹配某些东西那是在字符串开头之前?
据我所知,正则表达式不能按照你想要的方式行事(就像在一个字符串中返回前两个值后面的两个值),然后使用两个单个表达式相当容易只需在前者(a)之前使用后者(C),如在伪代码中使用
match_for_a = "a=(\d+)"
match_for_c = "C=(\d+)"
do_something( match_for_c)
do_something( match_for_a)
你已经(几乎)每个
都有相应的正则表达式a=(\d+)
和
C=(\d+)
编辑: 根据你的评论和我的回复,这里是一个函数返回一个元组的伪代码。
tuple match_c_and_a(){
match_for_a = regex_match("a=(\d+)")
match_for_c = regex_match("C=(\d+)")
return (match_for_c, match_for_a)
}
但是这种事情并不是纯粹的正则表达式,而是依赖于编程语言。
再次编辑 我很抱歉,如果我错过了解你farka,但我在提交的任何答案中都看不到任何阻止你做你想做的事情。
你能做到吗
for every item in the database
get the match for C
do something with it
get the match for a
do something with it
正则表达式能够匹配字符串中的任何位置,因此无论您获得C项和A项的顺序都无关紧要。
答案 2 :(得分:0)
符合您需要的正则表达式是:
A=(\d+) B=\d+ C=(\d+)
但是你需要收集这样的输出(取决于你正在使用的工具或编程语言):
\2 \1
\2
后跟\1
,因为您希望首先是C的值,然后是A的值。这些数字反映了括号中的表达式在正则表达式中的顺序。
注意:我使用Notepad++的查找和替换工具验证了此表达式。