我用西里尔符号的正则表达式不起作用

时间:2016-12-18 23:25:47

标签: sql regex python-3.x notepad++

好的,每个人。我有一种SQL代码(与此无关),我想在其中找到一个数字+“,”+俄语中的一些字符串(我的测试字符串是“в”)。这是一个字符串示例,我希望在其中找到:

insert into lemmas (id, word, lemma) values ("37","возбраняется","возбраняться");

这是我在python中的代码:

file_SQL = open('sql_code.txt', 'r', encoding = 'UTF-8')
SQLtext = file_SQL.read()
regux = '([0-9]+)?","' + wordform.lower() #wordform is "в"
find_it = re.search(regux, SQLtext)
found_it = find_it.group(1)
file_SQL.close()
return found_it

最后,我想得到具体的数字。我用这段代码得到的错误:

Traceback (most recent call last):
File "C:\Users\Неро\my_study\homework_4_2016\holy_guacamole_SQL.py", line 109, in <module>
main()
File "C:\Users\Неро\my_study\homework_4_2016\holy_guacamole_SQL.py", line 106, in main
imma_write_myself_a_SQL_file(val4, val3)
File "C:\Users\Неро\my_study\homework_4_2016\holy_guacamole_SQL.py", line 85, in imma_write_myself_a_SQL_file
f_id = find_f_id(wrdform)
File "C:\Users\Неро\my_study\homework_4_2016\holy_guacamole_SQL.py", line 95, in find_f_id
found_it = find_it.group(1)
AttributeError: 'NoneType' object has no attribute 'group'

显然,这意味着re.search()一无所获。 我也尝试在notepad ++中使用这个正则表达式进行搜索,但它不起作用: A picture of me trying to find this number before a word starting with "в".

(对不起俄罗斯记事本,希望没有人介意)正如你在图片中看到的那样,文件中存在以“в”开头的单词。 此外,我还尝试了其他几个正则表达式,例如([0-9]+)?\",\"([0-9]{1,3})","

我尝试用re.findall()搜索,但我基本上有一个空列表。

1 个答案:

答案 0 :(得分:0)

不确定这会有所帮助,但至少可以分享。

您可以尝试将字符串编码为unicode字符。例如в\x{0432}

您可以在возбраняется使用[\x{0400}-\x{0450}]+看到\x{的完整匹配。{/ 3}}。

以下是转换为unicode的工具:https://regex101.com/r/GRQBLK/1。然后用} ... a = [1, 2, 3, 4, 5, 6] b = a[1:] c = a[:-1] a => [1, 2, 3, 4, 5, 6] b => [2, 3, 4, 5, 6] c => [1, 2, 3, 4, 5] 包裹它。