Как я могу сопоставить точное слово текста с помощью reg.compile - PullRequest
1 голос
/ 03 июня 2019

Я хочу найти шаблон (С RE.COMPILE) для точных слов, как это,

Представьте себе такие слова [эфир, высота, афелий, запад]

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






regex_patterns = [

re.compile(r'aether?,|altitude?,|aphelion?,|apside?,|apsis?,|ascension?,|autumnal equinox?,|east?.|eastward?,|eclipse?,|ecliptic?,|elliptical?,|epicycle?,|equinoctical?,|exquinox?,|fixed star?,|latitude?,|longitude?s|mean ecliptic?,|meridian?,|mobile star?,|node?,|nodes?,|north?,|octant?,|orbit?,|\borbital?,|\bparallax?,|\brays?,|\bretrograde?,|rise?,|sidereal?,|sidereal position?,|solstice?,|south?,|star?,|vernal equinox?,|west?,')
                                          ]

Было бы хорошо, если бы регулярное выражение захватывало слова и слова (слово + пунктуация) как в этом предложении

"Запад, взгляни"

результат должен быть

запад

Ответы [ 3 ]

1 голос
/ 04 июня 2019
label = "PLAN"
texts = texts 
regex_patterns = [
re.compile(r'(\bAldebaran\b|\bAlphard\b|\bAntares\b|\bArcturus\b|\bBack of Leo\b|\bBeta Leonis\b|\bBeta Scorpii\b|\bBeta Tauri\b|\bBetelgeuse\b|\bcanis\b|\bCanis Minor\b|\bCor Leonis,7\b|\bCor Leonis\b|\bCor Scorpii,10\b|\bCor Scorpii\b|\bDenebola\b|\bdog\b|\bEpsilon Virginis\b|\bErichthonius\b|\bAldebaran\b|\bAlphard|\bAntares\b|\bArcturus\b|\bBack of Leo\b|\bBeta Leonis\b|\bBeta Scorpii\b|\b\Beta Tauri\b|\bBetelgeuse\b|\bcanis\b|\bCanis Minor\b|\bCor Leonis,7\b|\bCor Leonis\b|\bCor Scorpii\b|\bDenebola\b|\bdog\b|\bEpsilon Virginis\b|\bErichthonius\b|\bDenebola\b|\bdog\b|\bEpsilon Virginis\b|\bErichthonius\b|\bHeart of Hydra,8|\bHeart of Hydra\b|\bHydrae\b|\bKappa Geminorum\b|\bLambda Leonis\b|\bNeck of Leo\b|\bOrion\b|\bPalilicium\b|\bPolaris\b|\bPollux\b|\bProcyon\b|\bRegulus\b|\bSpica Virginis\b|\bTail of Leo\b|\bUrsa\b|\bUrsa Major\b|\bVindemiatrix\b|\bZeta Leonis\b)[:,]?')
]

Поскольку я сталкиваюсь с двойной пунктуацией (или непоследовательностью), я фиксирую все слова, как здесь:

\bCor Scorpii,10
1 голос
/ 03 июня 2019

Если мы хотим сопоставить определенные слова, мы, возможно, захотим начать с выражения, похожего на:

(aether|altitude|aphelion|apside|apsis|ascension|autumnal equinox|east|eastward|eclipse|ecliptic|elliptical|epicycle|equinoctical|exquinox|fixed star|latitude|longitudes?|mean ecliptic|meridian|mobile star|nodes?|north|octant|orbit|\borbital\b|\bparallax\b|\brays\b|\bretrograde\b|rise|sidereal|sidereal position|solstice|south|star|vernal equinox|west),?

Демо 1

, а затем измените его, добавив желаемую пунктуацию в класс char:

[,:;\.]?

и наше выражение, вероятно, станет:

(aether|altitude|aphelion|apside|apsis|ascension|autumnal equinox|east|eastward|eclipse|ecliptic|elliptical|epicycle|equinoctical|exquinox|fixed star|latitude|longitudes?|mean ecliptic|meridian|mobile star|nodes?|north|octant|orbit|\borbital\b|\bparallax\b|\brays\b|\bretrograde\b|rise|sidereal|sidereal position|solstice|south|star|vernal equinox|west)[,:;\.]?

Демо 2

Тест

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(aether|altitude|aphelion|apside|apsis|ascension|autumnal equinox|east|eastward|eclipse|ecliptic|elliptical|epicycle|equinoctical|exquinox|fixed star|latitude|longitudes?|mean ecliptic|meridian|mobile star|nodes?|north|octant|orbit|\borbital\b|\bparallax\b|\brays\b|\bretrograde\b|rise|sidereal|sidereal position|solstice|south|star|vernal equinox|west),?"

test_str = ("aether\n"
    "altitude\n"
    "aphelion\n"
    "apside\n"
    "apsis\n"
    "ascension\n"
    "autumnal equinox\n"
    "east?.\n"
    "eastward\n"
    "eclipse\n"
    "ecliptic\n"
    "elliptical\n"
    "epicycle\n"
    "equinoctical\n"
    "exquinox\n"
    "fixed star\n"
    "latitude\n"
    "longitude\n"
    "longitudes\n"
    "mean ecliptic\n"
    "meridian\n"
    "mobile star\n"
    "node\n"
    "nodes\n"
    "north\n"
    "octant\n"
    "orbit\n"
    "orbital\n"
    "parallax\n"
    "rays\n"
    "retrograde\n"
    "rise\n"
    "sidereal\n"
    "sidereal position\n"
    "solstice\n"
    "south\n"
    "star\n"
    "vernal equinox\n"
    "west")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
0 голосов
/ 03 июня 2019

Попробуйте это регулярное выражение:

'(word|other|foo|bar)+[\,\.]?'

, которое будет соответствовать word и word,, foo, foo, и другим словам с и без знаков препинания,, . или другие, которые вы добавляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...