一直在努力争取这个...
ABC 123 标签 123 标签 534
$ DEF564 (Hello World)这里的Arbit-rary
我希望得到匹配的文字:
ABC 123
DEF564
这几乎解释了我想要匹配的文字 [ - A-Z0-9_] + (我的例子并未涵盖所有可能性)
问题在于它是行 ^ 文本
的开头所以 ^ [ - A-Z0-9_] + 会匹配第一个示例,但当然会在第二个例子中失败。
如何编写正则表达式忽略第一个位置的$?这是我的源文本中唯一可能在第一个字符中有$或$ $但我不希望这个$成为匹配文本结果字符串的一部分。
我确信对于那些了解正则表达式的人来说并不难,但我的正则表达能力相当有限,所以这就是为什么我花了很多时间在这上面并且无处可去。
所以我需要的答案是
^ IgnoreDollarSignInFirstCharacterIfPresent [-A-Z0-9_] +
答案 0 :(得分:1)
答案 1 :(得分:0)
在perl中测试:
$ echo 'ABC 123 tab 123 tab 534
$DEF564 tab 456 tab 5454' | perl -lne '/^\$?\K(?:[-A-Z\d_\s])+/ and print $&'
ABC 123
DEF564
所以正则表达式是:
^\$?\K(?:[-A-Z\d_\s])+
答案 2 :(得分:0)
您可以使用以下正则表达式并从组索引1中获取所需的字符串。
^\$?([-A-Z0-9_ ]+)
$
是regex中的一个特殊的meta charcater,它代表了行锚的结束。因此,您需要将其转义为与文字$
符号匹配。此外,?
符号后面的$
会将之前的$
符号设为可选。
$ echo 'ABC 123 tab 123 tab 534
$DEF564 tab 456 tab 5454' | perl -lne '/^\$?([-A-Z0-9_ ]+)/ and print $1'
ABC 123
DEF564
或强>
简单地说,你可以使用,
^\$?\K[^\t]+
[^\t]+
匹配任何字符,但不匹配\t
一次或多次。
答案 3 :(得分:0)
如果我正确地理解了你的问题,我相信你想要一个不包含美元符号的正则表达式,即使它存在,在这种情况下你给出了以下正则表达式的两个例子也可以。
([A-Z]){3}\s?([0-9]){3}
它将匹配所有有3个大写字母的地方,后跟3个数字,中间有可选的空格。如果您想匹配任意数量的大写字母,后跟任意数量的数字,请将量词({3})替换为+。