只有在没有前面的情况下才能替换正则表达式

Mis*_*ein 5 regex

对于我对正则表达式公然缺乏知识感到抱歉,我理解这里有很多问题,但我可能会花费几个小时的时间来尝试,我无法弄清楚这一点.基本上我要做的是在字符串中替换所有出现的6位数字(有或没有连字符).但是,如果前面有某些单词,我不希望替换数字.

这个正则表达式匹配一个不包含单词的行?解决方案接近我正在寻找的,但我似乎无法以符合我的要求的方式使用它.

我需要的是如下:对于字符串:

"用户在2014年5月23日支付了43英镑,账户123456,支票123456交易:123456."

我希望只替换之前没有"check"或"transaction:"的6位数字.我一直在尝试的内容如下:

\b[0-9]{2}-?[0-9]{2}-?[0-9]{2}\b 
Run Code Online (Sandbox Code Playgroud)

(这取代了所有6位数字)

使用此如何使用正则表达式替换匹配,只有在它没有给定字符的前面?回答,我试过了

(^cheque\s[0-9]{2}-?[0-9]{2}-?[0-9]{2}\b) 
Run Code Online (Sandbox Code Playgroud)

(请注意我首先尝试其中一个我希望逃避的词,然后包括其他词.)这不会取代任何6位数字.

经过反复试验,我发现了

(cheque\s+[0-9]{2}-?[0-9]{2}-?[0-9]{2}\b) 
Run Code Online (Sandbox Code Playgroud)

将替换单词检查后跟一个6位数字,所以我到达那里 - 但我需要否定这个(并且交易后跟6位数字)并替换不在这些单词之前的6位数字.

如何否定整个正则表达式?回答有助于弄清楚如何否定表达但是尽可能地尝试,我找不到如何使它适用于我的情况.我试过了

^(?!(?:((transaction\s+[0-9]{2}-?[0-9]{2}-?[0-9]{2}\b) )|((cheque\s+[0-9]{2}-?[0-9]{2}-?[0-9]{2}\b) ))$).*$
Run Code Online (Sandbox Code Playgroud)

但这取代了整个弦!

非常感谢任何帮助.

感谢您.

tza*_*man 12

试试这个:

(?<!(?:cheque|transaction:)\s*)\d{2}-?\d{2}-?\d{2}\b
Run Code Online (Sandbox Code Playgroud)

说明:

  • (?<! ... ) 负面的后瞻性断言(匹配任何前面没有的东西)
  • (?:cheque|transaction:)\s* 非捕获组"检查"或"事务:"后跟任意数量的空格
  • \d{2}-?\d{2}-?\d{2}\b 六位数字可能连字符,以字边界结尾