1

我有以下问题:我的字符串包含可能包含点或逗号的数字。例如:

text = 'ην Θεσσαλονίκη και κατοικεί στην Καλαμαριά Θεσσαλονίκης, (οδός Επανομής 32)Το κεφάλαιο της εταιρείας ορίζεται στο ποσό των δέκα χιλιάδων διακόσια (10.200) ευρώ, διαιρούμενο σε δέκα χιλιάδες διακόσια (10.200) εταιρικά μερίδια, ονομαστικής αξίας ενός (1) ευρώ το καθένα, το οποίο καλύφθηκε ολοσχερώς'

然后我有没有任何符号的数字,例如'10200'

我想在字符串中找到子字符串的位置'10.200'

我想一种方法是创建一种在数字中插入点的方法。

但另一种方法是执行某种形式的模糊匹配。

为此,我尝试了正则表达式模块,但没有成功。IE:

import regex
regex.search('(10200){i}', f'{text}' )

回报:

<regex.Match object; span=(1, 154), match='ν Θεσσαλονίκη και κατοικεί στην Καλαμαριά Θεσσαλονίκης, (οδός Επανομής 32)Το κεφάλαιο της εταιρείας ορίζεται στο ποσό \nτων δέκα χιλιάδων διακόσια (10.200', fuzzy_counts=(0, 148, 0)>

10.200因此,它与我希望的不匹配。

你有什么建议?

4

2 回答 2

1

如果要在使用PyPiregex模块执行模糊正则表达式匹配时匹配最接近的匹配项,则需要使用该regex.ENHANCEMATCH选项或其(?e)内联修饰符版本:

import regex

text = "ην Θεσσαλονίκη και κατοικεί στην Καλαμαριά Θεσσαλονίκης, (οδός Επανομής 32)Το κεφάλαιο της εταιρείας ορίζεται στο ποσό των δέκα χιλιάδων διακόσια (10.200) ευρώ, διαιρούμενο σε δέκα χιλιάδες διακόσια (10.200) εταιρικά μερίδια, ονομαστικής αξίας ενός (1) ευρώ το καθένα, το οποίο καλύφθηκε ολοσχερώς"
m = regex.search('(?e)(?:10200){i}', text )
if m:
  print( m.group() )

退货10.200

此外,您知道两者之间可以有一个点,因此您可以告诉正则表达式引擎使用量词最多只允许 1 次插入:{i<=1}

m2 = regex.search('(?:10200){i<=1}', text )
if m2:
  print( m2.group() )

现在,即使没有该ENHANCEMATCH选项,您也可以获得预期的输出。

在线查看Python 演示

现在,最好的解决方案 是告诉 PyPi 正则表达式引擎只允许.使用{i<=1:[.]}量词插入字符:

regex.search(r'(?:10200){i<=1:[.]}', text )

(?:10200){i<=1:[.]}模式可能与在、、和10200之间某处插入一个点相匹配。10200

于 2020-07-02T20:18:42.433 回答
0

有点不清楚你所说的模糊是什么意思。这是您想将一个数字与一个固定数字范围内的点匹配的猜测,10200在这种情况下是字符串。

可以像这样创建正则表达式:

编辑更新:修正了一个错字

(?<![\d.])(?=\d+\.\d+(?![\d.]))1\.?0\.?2\.?0\.?0(?![\d.])

https://regex101.com/r/QM5W0m/1

断言只是将数字限制为在开始数字之后和结束数字之前有一个点。

于 2020-07-02T18:10:23.823 回答