регулярное выражение python соответствует нескольким шаблонам в & ldquo; OR & rdquo; и затем образец [дубликат]

Вот пошаговое объяснение, как установить MySQL и JDBC и как его использовать:

  1. Загрузите и установите сервер MySQL. Просто делайте это обычным способом. Помните номер порта, когда вы его изменили. По умолчанию 3306.
  2. Загрузите драйвер JDBC и поместите в путь к классам, извлеките ZIP-файл и поместите содержащий JAR-файл в путь к классам. Спецификатор JDBC для конкретного поставщика - это конкретная реализация JDBC API ( учебника здесь ). Если вы используете IDE, например Eclipse или Netbeans, вы можете добавить его в путь к классам, добавив JAR-файл в качестве Library в Путь сборки в свойствах проекта. Если вы делаете это «простой ваниль» в командной консоли, вам нужно указать путь к JAR-файлу в аргументе -cp или -classpath при выполнении вашего Java-приложения.
    java -cp .;/path/to/mysql-connector.jar com.example.YourClass
    Здесь есть ., чтобы добавить каталог current в путь к классам, чтобы он мог найти com.example.YourClass, а ; - разделитель классов, как в Windows. В Unix и клоны : должны использоваться.
  3. Создайте базу данных в MySQL. Давайте создадим базу данных javabase. Вы, конечно, хотите World Domination, так что давайте использовать UTF-8.
    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Создайте пользователя для Java и grant для доступа. Просто потому, что использование root является плохой практикой.
    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    
    Да, java - это имя пользователя, а password - пароль здесь.
  5. Определите URL JDBC. Для подключения базы данных MySQL с использованием Java вам нужен URL-адрес JDBC в следующем синтаксисе:
    jdbc:mysql://hostname:port/databasename
    hostname: имя хоста, на котором установлен сервер MySQL. Если он установлен на том же компьютере, где вы запускаете Java-код, вы можете просто использовать localhost. Он также может быть IP-адресом, например 127.0.0.1. Если вы столкнулись с проблемами подключения и с помощью 127.0.0.1 вместо localhost решили проблему, у вас возникла проблема в конфигурации вашей сети / DNS / hosts. port: порт TCP / IP, в котором слушает сервер MySQL. Это по умолчанию 3306. databasename: имя базы данных, к которой вы хотите подключиться. Это javabase. Итак, конечный URL должен выглядеть так:
    jdbc:mysql://localhost:3306/javabase
  6. Проверьте соединение с MySQL с помощью Java. Создайте простой Java-класс с помощью метода main() для проверки соединения.
    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    
    Если вы получили SQLException: No suitable driver, это значит, что либо драйвер JDBC не был полностью загружен, либо неправильный URL JDBC (т. е. он не был распознан ни одним из загруженных драйверов). Как правило, драйвер JDBC 4.0 должен быть автоматически загружен, когда вы просто бросаете его в путь к классам времени выполнения. Чтобы исключить одно и другое, вы всегда можете вручную загрузить его, как показано ниже:
    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    
    Обратите внимание, что вызов newInstance() здесь не требуется. Это просто исправить старую и багги org.gjt.mm.mysql.Driver. Объяснение здесь . Если эта строка выбрасывает ClassNotFoundException, то JAR-файл, содержащий класс драйвера JDBC, просто не помещается в путь к классам. Обратите внимание, что вам не нужно загружать драйвер каждый раз перед подключением . Только один раз во время запуска приложения достаточно. Если вы получаете SQLException: Connection refused или Connection timed out или специфичные для MySQL CommunicationsException: Communications link failure, то это означает, что БД вообще недоступна. Это может иметь одну или несколько из следующих причин: неправильный IP-адрес или имя хоста в URL-адрес JDBC. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером. Номер порта отсутствует или неверен в URL-адресе JDBC. Сервер БД отключен. Сервер БД не принимает соединения TCP / IP. У сервера БД закончились соединения. Что-то между Java и DB блокирует соединения, например. брандмауэр или прокси. Чтобы решить тот или иной, выполните следующие советы: Проверьте и проверьте их с помощью ping. Обновите DNS или используйте IP-адрес в URL-адрес JDBC. Проверьте его на основе my.cnf базы данных MySQL. Запустите БД. Убедитесь, что mysqld запущен без --skip-networking option. Перезагрузите базу данных и исправьте свой код соответствующим образом, чтобы он закрывал соединения в finally. Отключите брандмауэр и / или настройте брандмауэр / прокси, чтобы разрешить / переслать порт. Обратите внимание, что закрытие Connection чрезвычайно важно. Если вы не закрываете соединения и не получаете их много за короткое время, тогда в базе данных могут отсутствовать соединения, и ваше приложение может сломаться. Всегда приобретайте Connection в инструкции try-with-resources . Или, если вы еще не на Java 7, явно закрывайте его в finally блока try-finally. Закрытие в finally заключается только в том, чтобы оно было закрыто, а также в случае исключения. Это также относится к Statement, PreparedStatement и ResultSet.

Это было так далеко, что касается возможности подключения. Вы можете найти здесь более продвинутое руководство по загрузке и хранению полнофункциональных объектов модели Java в базе данных с помощью базового класса DAO.


Использование шаблона Singleton для соединение с БД является плохим подходом. См. Также другие вопросы: http://stackoverflow.com/q/9428573/ . Это ошибка первого запуска.

10
задан Alan Moore 10 August 2015 в 16:01
поделиться

2 ответа

s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)

Вам не нужно escape дважды, когда вы используете raw mode.

Выход: ['123', '3.1415926']

Также тип возврата будет списком strings .Если вы хотите, чтобы возвращаемый тип, как integers и floats, использовал map

import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))

Выход: [123, 3.1415926]

5
ответ дан vks 26 August 2018 в 08:53
поделиться

Здесь есть две вещи:

  • re.findall возвращает захваченные тексты, если шаблон регулярного выражения содержит в нем группы захвата
  • часть r'\\.' в вашем шаблон соответствует двум последовательным символам, \ и любому символу, отличному от новой строки.

См. ссылку findall :

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

Обратите внимание, что чтобы re.findall возвращали только совпадающие значения, вы обычно можете

  • удаляет избыточные группы захвата (например, (a(b)c) -> abc)
  • преобразует все группы захвата в , не захватывая (то есть замените ( на (?:) , если отсутствуют обратные ссылки, которые относятся к значениям группы в шаблоне (см. ниже)
  • вместо re.finditer использовать [x.group() for x in re.finditer(pattern, s)])

В вашем случае findall вернул все захваченные тексты, которые были пустыми, потому что вы \\ в [литерале] строки r'', которые пытались сопоставить литерал \.

Чтобы соответствовать номерам, вам нужно использовать

-?\d*\.?\d+

Регулярное выражение соответствует:

  • -? - Дополнительный знак минус
  • \d* - Необязательные цифры
  • \.? - Дополнительный десятичный разделитель
  • \d+ - 1 или более цифр.

См. demo

Вот демон IDEONE :

import re
s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)
8
ответ дан Wiktor Stribiżew 26 August 2018 в 08:53
поделиться
Другие вопросы по тегам:

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