对于我对正则表达式公然缺乏知识感到抱歉,我理解这里有很多问题,但我可能会花费几个小时的时间来尝试,我无法弄清楚这一点.基本上我要做的是在字符串中替换所有出现的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
六位数字可能连字符,以字边界结尾