Marrying question and answers with an expression
If you really want to get married anything up to a letter followed by a letter )
, or the end of the string, you can use this Regexp: (regex.)
([\s\S]+?(?=\b[a-z][)]|$))
[\s\S]
is a way to match all characters including line breaks.
Normally, we’d use the flag singleline to change point behavior, but does not exist in ASP.
(?=
…)
is a Lookahead (gives a "peek" ahead), ensuring it was followed by a letter and a )
, or at the end of the string. But it has the peculiarity of matching the pattern, while it is not part of the married fragment.
\b
is a word edge.
However, this expression is not very efficient, especially with long texts, and can give a false positive with cases like:
"pergunta (veja o segmento b) pergunta"
.
Bearing in mind that every answer is preceded by (at least) a line break, can use it as an additional condition. This way, we can combine whole lines, provided that one line internal don’t start with
[a-z][)]
.
Regex: (regex101)
[^\r\n]+(?:\r?\n(?!\s*[a-z][)])[^\r\n]*)*
Explanation:
[^\r\n]+
A whole line.
(?:\n(?!\s*[a-z][)]).*)*
No capture group, to repeat this sub-pattern (0-infinite):
\r?\n
A break in line.
(?!\s*[a-z][)])
Negative Lookahead, ensuring it is not followed by a letter and a )
(with possible spaces from the beginning of the line to the letter).
[^\r\n]*
A whole line.
Since you are using ASP:
Dim texto
texto = "Os Embargos de Terceiros fazem parte do procedimento especial, previsto no Código de Processo Civil," & _
" sendo possível sua utilização por quem, não sendo parte no processo, sofre constrição ou sofre" & _
" ameaça de constrição sobre bens que possua ou sobre os quais tenha direito incompatível com o ato constritivo." & _
" Sobre o ajuizamento dos embargos, assinale a alternativa INCORRETA." & vbNewline & _
"" & vbNewline & _
"Considere o segmento “[...] o Estado só percebe o eco enfraquecido.†(2º§). Pode-se afirmar que" & _
" a partir do recurso de linguagem utilizado pelo enunciador na escolha da palavra “Estadoâ€, identifica-se 7" & vbNewline & _
"" & vbNewline & _
"a) o estabelecimento de uma comparação entre “Estado†e “governantesâ€." & vbNewline & _
"b) o emprego de uma palavra redundante objetivando reforçar a ideia expressa." & vbNewline & _
" questões que irão ter várias quebra de linhas" & vbNewline & _
"" & vbNewline & _
"" & vbNewline & _
" questões que irão ter várias quebra de linhas" & vbNewline & _
"c) uma transferência de percepções resultando em uma fusão de impressões sensoriais." & vbNewline & _
"d) a evocação de um termo em lugar de uma palavra, com a qual se acha relacionada não sendo sinônimos. "
Set re = New RegExp
re.Global = true 'casar todas as coincidências
re.Pattern = "[^\r\n]+(?:\r?\n(?!\s*[a-z][)])[^\r\n]*)*"
'corresponder com a regex
Set matches = re.Execute(texto)
If (matches.Count) Then
'a primeira é a pergunta <- matches(0)
Response.Write("Pergunta === " & matches(0))
'o resto são as respostas <- matches(m)
For m = 1 To matches.Count - 1
Response.Write(vbNewline & "Resposta " & m & " === ")
Response.Write(matches(m))
Next
End If
Set matches = Nothing
Set re = Nothing
Upshot:
Pergunta === Os Embargos de Terceiros fazem parte do procedimento especial, previsto no Código de Processo Civil, sendo possível sua utilização por quem, não sendo parte no processo, sofre constrição ou sofre ameaça de constrição sobre bens que possua ou sobre os quais tenha direito incompatível com o ato constritivo. Sobre o ajuizamento dos embargos, assinale a alternativa INCORRETA.
Considere o segmento “[...] o Estado só percebe o eco enfraquecido.†(2º§). Pode-se afirmar que a partir do recurso de linguagem utilizado pelo enunciador na escolha da palavra “Estadoâ€, identifica-se 7
Resposta 1 === a) o estabelecimento de uma comparação entre “Estado†e “governantesâ€.
Resposta 2 === b) o emprego de uma palavra redundante objetivando reforçar a ideia expressa.
questões que irão ter várias quebra de linhas
questões que irão ter várias quebra de linhas
Resposta 3 === c) uma transferência de percepções resultando em uma fusão de impressões sensoriais.
Resposta 4 === d) a evocação de um termo em lugar de uma palavra, com a qual se acha relacionada não sendo sinônimos.
I clicked on a free lodging if you want to test it:
http://mariano.somee.com/258904/index.asp
Do you use any programming language? do you want to just take the question? or do you want to take the question and the answers separately?
– rray
@Rodneymendonça I already changed so that they stay in different lines
– Paz
It might just be the regular expression anyway. I’ll turn around here.
– Rod
If I can separate the question from the answers I can already register in the bank separately.
– Rod
But there will only be one question in that string, or there will be more?
– Guilherme Nascimento
I use Asp 3 but only need the ER. I want to get the question and the answers separately. I believe I will have to do 6 regex. One for the question and five for the answers. I believe the question would have to make some rule that picks the text up to the a) that is the beginning of the first answer.
– Rod
with that I could already get the answers, since the process would be the same.
– Rod
I’m unable to limit the question until the)
– Rod
only one question. I put in two paragraphs to represent the line break. @Guilhermenascimento
– Rod
try the following /(. *? a))/s https://regex101.com/r/okE9nz/3
– Caique Romero
show @Caiqueromero perfect. without wanting to abuse and to get the answers individually?
– Rod
Questions: 1. Is this the actual formatting of the file? (with these spaces between the questions and at the beginning of each answer) 2. This
pergunta
is just an analogy to a correct real question? Then it could be of correct mathematical content?– Guilherme Lautert