Regex для начинающих с пробелами и возвратом - PullRequest
0 голосов
/ 18 марта 2011

Я пытаюсь извлечь данные из PDF-файла в форме таблицы с заголовками, такими как имя, страна и различные числовые поля.

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

например

Sean O'Hair United States 2.758 137.906 50 -7.525 0.000  
 Y.E. Yang Korea 2.734 153.128 56 -6.722 0.000  
 Bo Van Pelt United States 2.733 153.056 56 -4.895 0.000

Ответы [ 2 ]

0 голосов
/ 23 сентября 2013

Маловероятно, что это все еще проблема, учитывая, сколько ему лет, но она указана как неотвеченная, поэтому в интересах тех, у кого похожая проблема ...

Вот быстрый шаблон, который извлечет все совпадения вмассив - может быть или нет необходимость сделать его более гибким:

<cfset Matches = rematch( '\D+ \d\.\d{3} \d+\.\d{3} \d\d -\d\.\d{3} 0.000' , Input ) />

Затем циклически просматривая эти результаты, для каждого матча вы можете отделить имя + страну от чисел с помощью:

<cfset NameAndCountry = trim(Left( CurMatch , refind('\d',CurMatch)-1 )) />
<cfset Numbers = Right( CurMatch , Len(CurMatch)-Len(NameAndCountry) ) />

Извлечь страны из названий непросто - на самом деле не существует каких-либо правил, для которых есть какой-то набор, поэтому требуется набор стран для проверки и проверки, что-то вроде:

<cfloop index="CurCountry" array=#Countries# >
    <cfif NameAndCountry.endsWith( CurCountry ) >
        <cfset Name = Left( NameAndCountry , Len(NameAndCountry)-Len(CurCountry) />
        <cfbreak />
    </cfif>
</cfloop>

Для чисел, используя ListToArray с пробелом в качестве разделителя, можно разделить их.

0 голосов
/ 18 марта 2011

Если вы передадите данные вашего примера через:

sed -e 's/^[^0-9]*//'

он удалит все нечисловые символы с самого начала. Это помогает?

P.S. Расколоть название страны было бы сложно, так как похоже, что между ними есть только пробел, а между именами и странами есть пробелы.

РЕДАКТИРОВАТЬ: К сожалению, это удалит знак минус из первого числа. Вероятно, лучше удалить только слова (последовательности из нецифров, за которыми следует пробел):

sed -e 's/^\([^0-9 ]* \)*//'
...