Как найти строку с определенным количеством символов

let str = ‘aaa@bbb@c@@cc’

//Должно вывести 4

задан 27 янв в 13:24

Zahar4ik's user avatar

16

'aaa@bbb@c@@cc'.match(/@/g).length
'aaa@bbb@c@@cc'.split('').filter(s => s === '@').length

const getNumberSymbolOccurrences = (str, find) => 
  str?.split('').filter(s => s === find).length ?? 0

// циклом

const getNumberSymbolOccurrences = (str, find) => {
  if (!str || !find) {
    return 0
  }

  let result = 0
  for (const s of str) {
    if (s === find) {
      result += 1
    }
  }

  return result
}

/* зависит от требований, но если такая функция используется в 
приложении, то
функция должна кидать исключение, если не передан какой либо из 
аргументов. Это делается для того что бы вызывающий код знал об 
ошибке и смог ее обработать.
  if (!str || !find) throw new Error('message')
/*

4

Задание: найти в тексте первые 5 слов, состоящих из пяти букв.

Какую формулу ввести в форму поиска?

Например если текст содержит только кириллицу, то под словом понимаем последовательность из набора символов в диапазоне от а до я количество символов равно 5 начиная с начала слова и заканчивая концом слова

на языке подстановочных знаков

начало слова обозначается символом <

конец слова обозначается символом >

набор символов обозначается скобками []

диапазон обозначается символом –

количество символов обозначается скобками {n;m}, где n мин. ,а m -макс. количество

если строка должна содержать только 5 символов то можно записать {5}

формула поиска будет такая <[а-я]{5}>

для текста на латинице <[a-z]{5}>

слово из пяти букв

Обязательно надо поставить галочку Подстановочные знаки, а то ничего не выйдет.

автор вопроса выбрал этот ответ лучшим

MaxFe­r
[77.7K]

6 лет назад 

С подстановочными знаками можно поэкспериментировать. Все они перечислены на странице поддержки MS Office в разделе о работе с Word.

Если ввести в форму поиска пять вопросительных знаков “?????”, то система выдаст очень плачевную картину, потому что во-первых, без указания границ слова результат выделит слова с этими пятью знаками в середине слова и во-вторых, среди вопросительных знаков могут быть пробелы. Даже если по краям установить угловые скобки “<?????>”, то избежать попадания пробела в середину слова не удастся. Так что поиск с вопросительными знаками отметаем.

Тогда нужно брать подстановочные знаки.

Границы слова отметить нужно обязательно – “<” и “>”. Далее можно попробовать ввести любой символ в диапазоне от “а” до “я” пять раз. Получим вот такую формулу: “<[а-я][а-я][а-я][а-я][а-я]>”.

Есть и более экономичный вариант, если указать количество символов (кроме пробелов) после заданного знака с помощью фигурных скобок. А этот заданный знак в диапазоне от “а” до “я”. (Если указать просто знак, то количество этих повторяющихся знаков будет 5 и нет гарантий, что в тексте есть слово с одинаковыми пятью буквами). И не забудем про границы слова

Итак, формула – “<[а-я]{5}>”. Количество букв в слове будет равно 5, а буква может быть любой в диапазоне от “а” до “я”.

владс­андро­вич
[766K]

4 года назад 

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

Выберите в меню – Главная, после чего переходите на графу – Найти или производите поиск, за счет комбинации клавишь Ctrl + H;

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

Введите в строку предназначенную для поиска такой набор символов как – ^$. При этом так как нам необходимо произвести нахождение слова в пять знаков, то и вводить его нужно в количестве пяти раз, причем в чистом виде.

Дальше вы активизируете функцию – Найти. При этом такая процедура требует повторения до тех пор, пока вы не найдете все слова.

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

  • Выбираем меню “Главная” – “Найти” или же вызываем его комбинацией Ctrl + H;
  • Нажимаем на кнопку “Больше” и убеждаемся, что значок около пункт “Подстановочные знаки” снят. Направление стоит выбрать “Везде”, дабы поиск был по всем документу, а не с момента, где остановился пользователь;
  • Вводим в строку поиска символы ^$. Поскольку у нас требуется найти слово в пять знаков, то и вводим его пять раз. Без каких-либо скобочек;
  • Нажимаем на кнопку “Найти”. И так повторяем процедуру до тех пор, пока все искомые слова не будут найдены.

Знаете ответ?

In case you are interested in performance, and would like to implement a slightly more complicated approach, I mocked up some data and did a relative simple test:

CREATE TABLE dbo.Test
(
    TestID INT NOT NULL CONSTRAINT PK_Test
        PRIMARY KEY CLUSTERED IDENTITY(1,1)
    , col1 VARCHAR(255) NOT NULL
    , col1_comma_count AS LEN(col1) - LEN(REPLACE(col1, ',','')) PERSISTED
);


INSERT INTO Test (col1) VALUES ('this, is, a, test');
GO 50000
INSERT INTO Test (col1) VALUES ('this, is, a, test, another, test');
GO 1500

The statements above create a test table with a computed column that contains the count of the number of commas in col1. The table then has 50,000 rows inserted where the comma count is 3, and 1,500 rows inserted where the comma count is 5.

I then executed the following query, with SET STATISTICS IO ON; SET STATISTICS TIME ON;:

SELECT COUNT(1)
FROM dbo.Test t
WHERE t.col1_comma_count = 5;

The statistics info:

enter image description here

As you can see, 248 logical reads are necessary to scan the entire table to obtain the count of rows where 5 commas. The execution plan for this query looks like:

enter image description here

As expected, SQL Server does a clustered index scan of the entire table.

I then created an index on the persisted computed column, to show the difference:

CREATE INDEX IX_Test_col1_comma_count ON dbo.Test (col1_comma_count);

and re-ran the test query. Here are the statistics info for the run with the index:

enter image description here

The number of reads necessary has dropped to 6, or 41 times less reads. On a busy system this will make a real difference. Here is the new execution plan:

enter image description here

This time, we see a much more efficient seek into the index.

If we drop both the index and the computed column from the table, we see a huge increase in time spent getting the results of the query:

DROP INDEX IX_Test_col1_comma_count ON dbo.Test;
ALTER TABLE Test DROP COLUMN col1_comma_count;

SELECT COUNT(1)
FROM dbo.Test t
WHERE LEN(col1) - LEN(REPLACE(col1, ',','')) = 5

STATISTICS TIME ON shows a value on my computer (an Intel Core-i7 3.4Ghz with 8GB ram) of SQL Server Execution Times: CPU time = 15 ms, elapsed time = 24 ms.

With the index and computed, persisted column in place, the SQL Server execution times are SQL Server Execution Times: CPU time = 0 ms, elapsed time = 2 ms.

Clearly, there is a price to pay for doing string manipulation in the WHERE clause.

Выполните поиск только в одном столбце, затем выделите все ячейки в этом столбце более чем (числом) символов, поэтому я меняю данные по одному?

Спасибо.

Его номер телефона, тысячи из них, многие набраны неправильно, по крайней мере, 100, я пытаюсь найти их напрямую, не просматривая их все

Я понимаю ваш вопрос так: вы хотите отредактировать все ячейки, которые содержат более X символов.

Самый простой способ сделать это – в соседнем столбце использовать функцию LEN для вычисления длины символов.

Затем выделите оба столбца и нажмите на фильтр (Data --> Filter). Отфильтруйте второй столбец, чтобы отобразить только те строки, у которых номера больше X В Excel 2010 этот параметр скрыт в меню « Number Filters .

Наконец, отредактируйте первый столбец по желанию.

Если вы хотите выделить ячейки, содержащие более X символов, вы можете использовать Conditional formatting и функцию LEN() .

Например: вы хотите выделить все ячейки в столбце A, содержащие более X символов.

  1. Выберите столбец A
  2. Нажмите на кнопку условного форматирования -> Новое правило
  3. В диалоге выбрал последний вариант (что-то вроде пользовательской формулы)
  4. Заполните формулу =LEN(A1)>X (X – любое целое число больше 0)
  5. Установить формат для выделения

См. Справку Excel для лучшего понимания.

PS: у меня нет английской версии Excel, поэтому некоторые имена могут немного отличаться.

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

Если у вас есть столбец (скажем, “C”), полный данных, начиная со строки 3, и вы хотите, чтобы все ячейки были выделены более чем 15 символами, выберите первую ячейку в списке и:

  1. Перейти к условному форматированию> новое правило.
  2. Выберите «Использовать формулу, чтобы решить, какие ячейки отформатировать»
  3. Тип: = Len(C3)> 15, выберите формат (цвет и т.д.)
  4. Хит “ОК”.

Затем выберите ячейку C3 правой кнопкой мыши, перетащите курсор вниз по всему столбцу данных и выберите “Fill Formatting”.

Это должно сделать это.

Я не знаю ни одного простого решения, я бы сделал:

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

Поиск слова (значения) по количеству символов из текста

Roman777

Дата: Вторник, 17.06.2014, 11:29 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 980


Репутация:

127

±

Замечаний:
0% ±


Excel 2007, Excel 2013

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

Прикрепил фаил, где описано, что я имею в виду.


Много чего не знаю!!!!

 

Ответить

Russel

Дата: Вторник, 17.06.2014, 11:51 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1392


Репутация:

318

±

Замечаний:
0% ±


Excel 2010

в приложенном файле подходит вот такая формула:

Код

=ПСТР(A9;ДЛСТР(A9)-20;15)


QIWI 9173973973

 

Ответить

Roman777

Дата: Вторник, 17.06.2014, 12:06 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 980


Репутация:

127

±

Замечаний:
0% ±


Excel 2007, Excel 2013

Спасибо, Russel.
Объясни пожалуйста, ДЛСТР(A9)-20 – это начало положения текста считая с конца текста?

А что же делать, если искомое слово из (n) символов будет находиться в разных местах текста…?


Много чего не знаю!!!!

 

Ответить

Russel

Дата: Вторник, 17.06.2014, 12:42 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1392


Репутация:

318

±

Замечаний:
0% ±


Excel 2010

ДЛСТР(A9)-20 – это начало положения текста считая с конца текста

ДЛСТР(A9) – длина всей строки
20 – количество символов с конца строки до начала нужного текста

Если в разных местах текста – давайте пример, посмотрим. С разными вариантами артикулов (?).


QIWI 9173973973

 

Ответить

Roman777

Дата: Вторник, 17.06.2014, 13:15 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 980


Репутация:

127

±

Замечаний:
0% ±


Excel 2007, Excel 2013

Не, артикулы все берем с одинаковым кол-вом символов, иначе довольно трудно выделять их будет, проще вручную на некоторых участках текста перебить формулу.
Да и вообще я уже вашу формулку приспособил, смотрю все мои тексты практически идентичны. Так что особого смысла именно в новом примере нет. По поводу моего вопроса, это я больше для развития интересовался, можно ли как-нить иначе записать формулу, чтобы она не опиралась на поиск позиции именно, просто искала слова (выражения) из n-числа символов, считая, например, за разделители между словами в тесте пробелы или ещё какие-нить условные знаки.

Ещё раз спасибо) формула пригодилась очень!


Много чего не знаю!!!!

 

Ответить

Добавить комментарий