RegEx в cfml, чтобы соответствовать целому слову в верхнем регистре с последующим переводом строки - PullRequest
2 голосов
/ 13 мая 2011

Я боролся с этим весь день, потому что регулярные выражения - не самая любимая моя тема.

Я пытаюсь найти, когда происходит следующее:

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

Во время тестирования я обнаружил, что если я определил, какой должна быть заглавная буква (в данном случае S):

[A-Z] [A-Z] + \ n S

Это будет соответствовать, однако, если я изменю его на что-то вроде

[A-Z] [A-Z] + \ n [A-Z]

Теперь он берет любой текст, содержащий перевод строки, независимо от того, предшествует ли ему заглавное слово.

Я что-то упускаю из виду?

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

 People who have a disability that would prevent them from performing required 
 basic life support skills are advised that they will not be able to achieve the 
 unit of competency. 
 ENROLLING IN FIRST AID UNITS OF COMPETENCY 
 If you are seeking to enrol in a First Aid unit of competency e.g. HLTFA301B 
 Apply first aid, you are advised that to complete the unit you must be able to 
 perform basic life support skills, for example control bleeding and perform 
 cardiopulmonary resuscitation (CPR). If you have a disability that would prevent 
 you from performing required basic life support skills you are advised that you 
 will not be able to achieve the unit of competency. 
 REQUIREMENTS AND ADVICE FOR STUDENTS PARTICIPATING IN WORK PLACEMENT 
 Some or all of the following advice will apply to you, depending on your course 
 and the type of organisation where you will be undertaking work placement. 

Приветствие Mark

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Есть две основные проблемы. В строках есть пробелы и, возможно, другие символы. Вам нужно будет хотя бы использовать больше, чем [A-Z], чтобы искать их. По крайней мере, вам нужно будет включить пробел в набор [A-Z]. Если есть другие символы, такие как цифры или знаки препинания, вам необходимо добавить их и здесь. И, как упоминала Карора, вам нужно будет проверять изменения в перерывах.

Вот пример, который также включает в себя положительный взгляд вперед, чтобы он не возвращался в результате, поэтому вы, вероятно, можете просто использовать массив результатов сопоставления непосредственно на следующем шаге вашего кода.

<cfset matches = reMatch(" [A-Z ]+(?= \r?\n [A-Z])", teststring) />
<cfdump var="#matches#" />
2 голосов
/ 13 мая 2011

Когда вы соответствуете разрыву строки, убедитесь, что вы считаете, что разрывы строк могут (или не могут) иметь возврат каретки перед ними.Особенно для текстовых файлов из Windows.

Так что вы можете захотеть что-то вроде:

"[] [AZ] + \ r? \ N [AZ]"

Убедитесь, чтовы не оставляете случайные пробелы в своем регулярном выражении, потому что они, скорее всего, будут рассматриваться как буквальные пробелы.Я заключил (только) пробел в вышеприведенном выражении в [], чтобы было понятнее, что он является частью регулярного выражения, и я заключил все регулярное выражение в "символы, потому что вы, вероятно, этого хотите. [] Вокруг этого пространстваоднако не нужно.

Знак «после совпадения» означает «0 или более из предшествующего», поэтому в этом случае мы хотим, чтобы \ n дополнительно предшествовал \ r.

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