• 1 Post
  • 20 Comments
Joined 1 year ago
cake
Cake day: September 1st, 2023

help-circle

  • I would argue that having distinct match and search helps readability. The difference between match('((([0-9]+-[0-9]+)|([0-9]+))[,]?)+[^,]', s) and search('((([0-9]+-[0-9]+)|([0-9]+))[,]?)+[^,]', s) is clear without the need for me to parse the regular expression myself. It also helps code reuse. Consider that you have PHONE_NUMBER_REGEX defined somewhere. If you only had a method to “search” but not to “match”, you would have to do something like search(f"\A{PHONE_NUMBER_REGEX}\Z", s), which is error-prone and less readable. Most likely you would end up having at least two sets of precompiled regex objects (i.e. PHONE_NUMBER_REGEX and PHONE_NUMBER_FULLMATCH_REGEX). It is also a fairly common practice in other languages’ regex libraries (cf. [1,2]). Golang, which is usually very reserved in the number of ways to express the same thing, has 16 different matching methods[3].

    Regarding re.findall, I see what you mean, however I don’t agree with your conclusions. I think it is a useful convenience method that improves readability in many cases. I’ve found these usages from my code, and I’m quite happy that this method was available[4]:

    digits = [digit_map[digit] for digit in re.findall("(?=(one|two|three|four|five|six|seven|eight|nine|[0-9]))", line)]
    [(minutes, seconds)] = re.findall(r"You have (?:(\d+)m )?(\d+)s left to wait", text)
    

    [1] https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html

    [2] https://en.cppreference.com/w/cpp/regex

    [3] https://pkg.go.dev/regexp

    [4] https://github.com/search?q=repo%3Ahades%2Faoc23 findall&type=code















  • Bathroom mirrors that don’t steam up after taking a shower.

    Vending machines that are competent at accepting cash. Everywhere else that I’ve been to, you have to smoothen the bill and make sure it has no wrinkles or bended corners, and even then the machine would sometimes give you a hard time. In Japan, you just insert a stack (!) of bills, and the machine will count them within seconds, and also give you change in bills, and not a gazillion of coins.

    Gates at the train stations are also better than everywhere else. You don’t have to wait for the person in front of you to pass the gate, you just insert your ticket and go. You also don’t need to look for arrows or notches or whatever on the ticket to insert it correctly.

    Electric kettles that are very quiet and keep the water hot for a very long time.

    Trains where all seats face the front, so you don’t have to sit against the direction of travel.