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
266 views
in Technique[技术] by (71.8m points)

python - Regular Expression for whole numbers and integers?

I am trying to detect all integers and whole numbers (among a lot of other things) from a string. Here are the regular expressions I am currently using:

Whole numbers: r"[0-9]+"

Integers: r"[+,-]?[0-9]+"

Here are the issues:

  1. The whole numbers regex is detecting negative numbers as well, which I cannot have. How do I solve this? If I use a space before at start of the regex I get only positive numbers, but then I get a space at the start of my output!
  2. For whole numbers, I would like to detect positive numbers with the format +[0-9] but store them without the sign.
  3. For integers, I would like to store any positive integer detected with the sign, irrespective if it is present in the original string.

Almost done now: One last thing, I have a string that says "Add 10 and -15". I want to store the integers in a list. I do so using the findall(). While storing the numbers is it possible to store '10' as '+10'

See Question&Answers more detail:os

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

1 Reply

0 votes
by (71.8m points)

For positive integers, use

r"(?<![-.])[0-9]+(?!.[0-9])"

Explanation:

(?<![-.])   # Assert that the previous character isn't a minus sign or a dot.
          # Anchor the match to the start of a number.
[0-9]+      # Match a number.
          # Anchor the match to the end of the number.
(?!.[0-9]) # Assert that no decimal part follows.

For signed/unsigned integers, use

r"[+-]?(?<!.)[0-9]+(?!.[0-9])"

The word boundaries are crucial to make sure that the entire number is matched.


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

...