Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
161 views
in Technique[技术] by (71.8m points)

python - How can I write a regex that finds everything but 4 digit numbers like 2000 or 1990 or 1234?

I have a text like this:

Film_relase_date:1970_films_by_20th_Century_Fox

I would like to create a regex that matches all text except 1970, resulting in:

Film_relase_date:_films_by_20th_Century_Fox

I tried with the regex:

[^d{4}]

But this regex returns:

Film_relase_date:_films_by_th_Century_Fox

And therefore also excludes the 20 which instead I would like to be matched. How can I improve the regex?

EDIT: I want to use this regex to do something like:

x = 'Film_relase_date: 1970_films_by_20th_Century_Fox'

REPLACE (x, "Anything that is not a 4-digit number", "Non-Space") = 1970
question from:https://stackoverflow.com/questions/65844609/how-can-i-write-a-regex-that-finds-everything-but-4-digit-numbers-like-2000-or-1

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Remember that {4} is supposed to be added after the character class, not inside.

Anyway, if you want to match "all text except 1970", you can use the following regex:

([^d]|(?<!d)d(?!d{3}(?!d))d*)?

see demo.

This regex matches:

  • a non-digit character or
  • a digit char that is nor preceded by another digit and it is not followeb by exactly 3 digits

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...