Выход HTML - выражения Reg?

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

$('#try').bind("binding", function(e) {
  alert("Backspace"); //Pop up to see
});
var a;
$('#change').keyup(function(e) {
  a = e.keyCode;
  $(this).prop('disabled', true);
});
$('#try').keyup(function(e) {
  if (e.keyCode == a) {
    $(this).trigger("binding"); //will allow the message to be displayed
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Press the key you want to bind to backspace <input type="text" id="change"><br> Change the input <input id="try" type="text">
[ 112]

5
задан Dillorscroft 5 May 2009 в 10:29
поделиться

6 ответов

Я сделал бы это в два прохода:

Первый проход ищет любые "s", которым непосредственно предшествуют числа, и выполняет эту замену:

s / ([0-9 ]) "/ \ 1 & Prime; / g

В зависимости от текста, с которым вы имеете дело, вам может потребоваться / нужно расширить это регулярное выражение, чтобы также распознавать числа, записанные в виде слов; Я только для простоты проверил цифры.

Со всеми этими заботами второй проход может легко конвертировать пары "s, как вы описали:

s /" ([^ "] *)" / & ldquo; \ 1 & rdquo; / g

Обратите внимание на использование [^ "] * вместо . * - мы хотим найти два набора двойных -цитаты с любым количеством не двойных кавычек символов между ними. Если добавить это ограничение, то получим Не должно быть проблем с обработкой строк с несколькими разделами в кавычках. (Это также может быть достигнуто с использованием не жадного . *? , но класс отрицанных символов более четко определяет ваше намерение и, в большинстве реализаций регулярных выражений, более эффективен.)

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

3
ответ дан 14 December 2019 в 08:59
поделиться

вы описали в основном скрытую марковскую модель,

http://en.wikipedia.org/wiki/Hidden_Markov_model

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

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

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

1
ответ дан 14 December 2019 в 08:59
поделиться

Интересно, можно ли сбежать? это во время выполнения без понимание содержания?

Учитывая, что вы добавляете семантическое значение к пунктуации, которая в настоящее время кодируется в другом тексте ... нет, не совсем.

Регулярные выражения были бы самым простым инструментом по крайней мере для части Это. Я бы посоветовал искать / \ d + "/ для случаев с числами в дюймах. Но для разделителей кавычек, после того как вы искали какие-либо другие особые случаи или фразы, может быть проще использовать алгоритм для сопоставления пар, как в скобках и скобки: токенизируйте и считайте. Затем проверьте реальный ввод и уточните.

Но я действительно должен спросить: почему?

1
ответ дан 14 December 2019 в 08:59
поделиться

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

Моей первой попыткой было бы следующее.

  • идти слева направо через строку
  • попеременно заменяя двойные простые числа левыми и правыми двойными кавычками, но замените двойными простыми числами, если слева находится число
  • , если кавычки не сбалансированы в конце строки, возвращайтесь, пока не найдете число с двойными простыми числами и не измените двойные простые числа на левые или правые двойные кавычки в зависимости от на предыдущих двойных кавычках.

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

1
ответ дан 14 December 2019 в 08:59
поделиться

I know this is off the wall, but have you considered Mechanical Turk? This is the sort of problem humans excel at, and computers, currently, are terrible at. Choosing the correct punctuation requires understanding of the meaning of the sentence, so a regex is bound to fail for edge cases.

1
ответ дан 14 December 2019 в 08:59
поделиться

Вы можете попробовать что-то вроде этого. Сначала замените цитаты этим регулярным выражением:

"((?:[^"\d]+|\d"?)*)"

А затем знак дюйма:

(\d+)"

Вот пример на JavaScript:

'"It just missed" Paul said "by 9" almost"'.replace(/"((?:[^"\d]*|\d["']?)+)"/g, "&ldquo;$1&rdquo;").replace(/(\d+)"/g, "$1&Prime;");
0
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: