How to use regex with optional characters in python?

后端 未结 5 675
离开以前
离开以前 2020-12-01 12:12

Say I have a string

\"3434.35353\"

and another string

\"3593\"

How do I make a single regular expression

相关标签:
5条回答
  • 2020-12-01 12:16

    Read up on the Python RegEx library. The link answers your question and explains why.

    However, to match a digit followed by more digits with an optional decimal, you can use

    re.compile("(\d+(\.\d+)?)")
    

    In this example, the ? after the .\d+ capture group specifies that this portion is optional.

    Example

    0 讨论(0)
  • 2020-12-01 12:28

    This regex should work:

    \d+(\.\d+)?
    

    It matches one ore more digits (\d+) optionally followed by a dot and one or more digits ((\.\d+)?).

    0 讨论(0)
  • 2020-12-01 12:28

    Use the "one or zero" quantifier, ?. Your regex becomes: (\d+(\.\d+)?).

    See Chapter 8 of the TextWrangler manual for more details about the different quantifiers available, and how to use them.

    0 讨论(0)
  • 2020-12-01 12:35

    use (?:<characters>|). replace <characters> with the string to make optional. I tested in python shell and got the following result:

    >>> s = re.compile('python(?:3|)')
    >>> s
    re.compile('python(?:3|)')
    >>> re.match(s, 'python')
    <re.Match object; span=(0, 6), match='python'>
    >>> re.match(s, 'python3')
    <re.Match object; span=(0, 7), match='python3'>```
    
    0 讨论(0)
  • 2020-12-01 12:41

    You can put a ? after a group of characters to make it optional.

    You want a dot followed by any number of digits \.\d+, grouped together (\.\d+), optionally (\.\d+)?. Stick that in your pattern:

    import re
    print re.match("(\d+(\.\d+)?)", "3434.35353").group(1)
    
    3434.35353
    
    print re.match("(\d+(\.\d+)?)", "3434").group(1)
    
    3434
    
    0 讨论(0)
提交回复
热议问题