我的目标是从一个字符串中提取工资,如果这个工资来自集体协议,我想出了下面的正则表达式:
pattern = "([Kk]ollektivvertragliche[sn]|Kollektivvertrag|[Cc]ollective [Aa]greement|[Kk]ollektivvertr|KV) .* ([0-9]{1,4}[.,][0-9]{2,3}[,]*[0-9]*) .* ([0-9]{1,4}[.,][0-9]{2,3}[,]*[0-9]*)"
([Kk]ollektivvertragliche[sn]|Kollektivvertrag|[Cc]ollective [Aa]greement|[Kk]ollektivvertr|KV)
-第一个组,用于获取薪金是否根据集体协议定义。([0-9]{1,4}[.,][0-9]{2,3}[,]*[0-9]*)
-薪金格式为xx.yyy,zz/xx.yyy,zz/x.yyy/xxx(例如21.950,13/1.859,20/1.700/700 $)- 集体协议和薪金之间的
.+
与任何字符匹配。
我已经测试过了,如果所有组都可用,它看起来工作得很好:
t = 'Entlohnung nach Caritas Kollektivvertrag : __ [lineBreak] Mindestgehalt in Gehaltsstufe 1 - Verwendungsgruppe VI , dzt. EUR 1.849,90 bis 1.900,32 '
r = re.search(pattern,t)
r.groups()
但是,如果某些组(例如集体协议或工资)被遗漏,它就不起作用。
string examples:
#t = 'EUR 35.362,00 Jahresbrutto'
#t = '2.800 brutto/Monat'
#t = 'laut Kollektivvertrag beträgt € 1.597,72 brutto pro Monat auf Basis Vollzeitbeschäftigung.'
#t = 'KV-Mindestgehalt von monatlich € 1.671,00'
#t = 'kollektivvertragliches Mindestgehalt von € 2.026,88 brutto pro Monat'
#t = 'Bruttojahreseinkommen ab € 50.000,'
#t = 'ein KV-Mindestlohn von EUR 1.277,00 brutto pro Monat'
#t = 'beträgt jedoch mindestens € 25.480'
#t = 'Gehalt lt. BAGS-KV €\xa02.100,78 brutto'
#t = 'kollektivvertraglicher Mindestgehalt EUR 33.000 Brutto/Jahr'
#t = '\nLohn/Gehalt ab EUR 2500,00 brutto monatlich,'
#t = 'KV IT __EUR 2.302'
#t = '25 Wochenstunden EUR [lineBreak] 1.641,91 bis EUR 1.859,21 brutto'
#t = 'Entlohnung nach Caritas Kollektivvertrag: __ [lineBreak] Mindestgehalt in Gehaltsstufe 1 - Verwendungsgruppe VI , dzt. EUR 1.849,90'
#t = 'The position is remunerated according to the Kollektivvertrag for Austrian Universities, i.e., the salary amounts to at least 38.230EUR/year before taxes'
#t = 'Erfahrung bieten wir ein Bruttojahresgehalt ab EUR 36.400.'
我试过在?
和?:
的帮助下实现可选组(就像在这篇文章中的python regex optional capture group),但也没有成功。
所需的输出:(组1结果、组2结果、组3结果)。
如果遗漏了某些组:我希望使用None
而不是“group_n_result
2条答案
按热度按时间0yycz8jy1#
不确定
#t = '
是否是您要包含在传回值中的字串的一部分,但使用3个撷取群组,其中前2个是选择性的:Regex demo
输出量
ljsrvy3e2#
要捕获几个匹配相同模式的组,似乎需要finditer。我能达到的最好效果是这样的(通过一些调整,你应该能够使它适合你的需要):