Как я могу поймать небольшое дробное число с помощью регулярных выражений? - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу поймать дробное число с помощью регулярных выражений.Но я до сих пор не нашел ни намека.

Например, здесь, в этом предложении, как я могу поймать дробное число?

5 декабря следующего года в 6 часов утра Марс был замечен в 9 ° 19 ° 'Весов, на широте 1 ° 53½' северной широты, Солнце в 23 ° Стрельца ^ 5

Я написал код для захвата долготы, но я могу изменить его, чтобы поймать также долготу, включая номер дроби, вот код

label = "LONG"   
texts = sents  

regex_patterns = [
                  re.compile(r"\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\d{1,2}\s?[\"|”|“]\s?[A-Z][a-z.]+"   #LONG in format 
                              "|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\s?[A-Z][a-z.]+"
                              "|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]\s?\d{1,2}\s?[\"|”|“]"
                              "|\d{1,3}\s?°\s?\d{1,2}\s?[\'|’]"
                              "|\d{1,3}\s?°\s?[A-Z][a-z.]+")           
]


examples = []
for text in texts:
    for expression in regex_patterns:
        spans = []
    for match in re.finditer(expression, text):
        start, end = match.span()
        span = {"start": start, "end": end, "label": label}
        spans.append(span)
    task = {"text": text, "spans": spans}
    examples.append(task)     

1 Ответ

2 голосов
/ 20 сентября 2019

Вы можете сопоставлять символы Юникода с тегом \uXXXX, где XXXX - шестнадцатеричный код для символа Юникода.Вы можете найти все юникодные фарсы здесь .

Так, например, если вы хотите захватить каждую доступную фракцию, вы можете получить это:

[\u00BC-\u00BE\u2150-\u215E]

Так что сВ качестве примера ввода вы можете получить:

>>> re.findall(r'\d{1,3}\s?°\s?\d{1,2}\s?[\u00BC-\u00BE\u2150-\u215E]?[\'|’]', s)
['9° 19⅖’', '1° 53½’']
...