comment en peut utiliser une expression réguliere qui selection un mot d’au moins 6 caractères répété au moins 5 fois dans une même ligne.
merci
Version imprimable
comment en peut utiliser une expression réguliere qui selection un mot d’au moins 6 caractères répété au moins 5 fois dans une même ligne.
merci
Il faut utiliser les classes Pattern et Matcher de java.util pour exécuter des expressions régulières. Je t'invite à lire ce tutoriel pour comprendre le fonctionnement des regexp en Java : http://cyberzoide.developpez.com/java/regex/
merci pour votre aide, oui je comprend comment le faire avec Pattern, mes par exemple trouvez un fichier contenant un mot d’au moins 6 caractères,
se terminant par la lettre c et n’utilisant que les lettres a,b,c,e,f,g,h,i,j,k,l et aucune majuscule.
ma expression régulière est "[a-ce-l]*c$" mes ca me donne pas le bonne résultat la même chose pour la question que j'ai poser mon expression est "\w{0,6}.\s{5}" merci.
- Le * ne veut pas dire "au moins 5 fois," bien sûr -_-°. Pour "au moins N fois," c'est {N,} la virgule indiquant "entre N et un nombre indéterminé de fois."
- Qu'est-ce que ce $ vient faire là ? Vire.
C'est peut-être possible en jouant avec le lookahead et les non capturing group, mais je crains que l'expression régulière au finale soit
- imbuvable
- intestable
- non fiable
Pourquoi ne pas simplement faire quelques lignes de code qui fasse ce boulot.
voila mon programme :
je veut sélectionne toutes les expressions commençant et se terminant par le même mot séparé par au plus 10 caractères comme « la vie la » dans « la vie la mort », sa sélectionne juste la vie la m sa marche pas :cry:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.util.regex.*; public class Motif { public static void main(String[] args) { try{ Pattern p = Pattern .compile("^[a-z].{0,10}"); String entree = "la vie la mort"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(entree.substring(m.start(), m.end())); }catch(PatternSyntaxException pse){} } }
Pour sélectionner "N'importe quoi, suivi d'un A, suivi de la même chose qu'avant le A" :
(.*) : N'importe quoi, dans un capturing group. Comme c'est le premier, il a le numéro 1.Code:"(.*)A\\1"
A : La lettre A
\\1 : La même chose que ce qu'on a pris dans le capturing group numéro 1
À toi d'utiliser ça pour ton problème.
si j'ai bien compris faut que je face ca :
sa me donne pas le bon résultat sa donneCode:"(.*)([a-z].{0,10})\\1"
la vie la
mort
il faut pas que s'affiche la mort merci
Bien vu, mon exemple acceptait aussi "Rien, la lettre A, et à nouveau rien."
Pour corriger ce serait :
"N'importe quel caractère une ou plusieurs fois, la lettre A, et ce qu'on a pris avant la lettre A"Code:"(.+)A\\1"
Merci pour votre aide ,sa fonction :ccool:
je reviens a mon exemple trouvez un fichier contenant un mot d’au moins 6 caractères, se terminant par la lettre c et n’utilisant que les lettres a,b,c,e,f,g,h,i,j,k,l et aucune majuscule. voila mon code :
je veut sélectionner juste abeghic sa marche pas .Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import java.util.regex.*; public class Motif { public static void main(String[] args) { try{ Pattern p = Pattern .compile("([a-ce-l].{6,})c"); String entree = "abeghic fabidlc"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(entree.substring(m.start(), m.end())); }catch(PatternSyntaxException pse){} } }
merci
Qu'est-ce qu'il fait là ce point ?
(Et ces parenthèses, tant qu'à faire)
je pense que je lais trouvais :
Code:"[a-ce-l]{6,}c"
j'essayer de sélectionner un mot d’au moins 2 caractères répété au moins 5 fois dans une même ligne.
sa donner :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import java.util.regex.*; public class Motif { public static void main(String[] args) { try{ Pattern p = Pattern .compile("([a-z]{2,}).{5}"); String entree = "la vie est est est est est belle"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(entree.substring(m.start(), m.end())); }catch(PatternSyntaxException pse){} } }
la vie
est est
est est
est belle
j'ai besoin d'aide voila mon programme
sa me donne ce résultat 2005,43.45Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.*; import java.util.regex.*; public class Motif { public static void main(String[] args) { try{ Pattern p = Pattern .compile("[0-9]{4},[0-9\\.]+"); String entree = "12/12/2005,43.45,32.1,"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(entree.substring(m.start(), m.end())); }catch(PatternSyntaxException pse){} } }
au lieu de ce lui la 2005,32.1 sa fais plusieurs heur que je travaille sur ca merci
A noter que ca n'a strictement rien à voir avec les mot et répétition évoqués auparavant.....Code:
1
2
3
4
5 Pattern p = Pattern .compile("([0-9]{4}),.*([0-9\\.]+)"); String entree = "12/12/2005,43.45,32.1,"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(m.group(1)+m.group(2));
sa marche pas sa donne ce résultat :
20051
merci
Ya tu quelqu'un qui peu m'aider svp :cry:
Ceci devrais corriger.
Code:Pattern p = Pattern .compile("([0-9]{4}),.*?([0-9\\.]+)");
sa marche pas plus :cry: sa donne 2005 43.45 ou lieu du 2005 32.1
Salut,
pour moi les expressions régulières sont fait pour traiter des motifs répétitifs, mais pas une occurence particulière de la répétition.
Genre je cherche les sous parties de ma chaîne qui correspondent à cette définition particulière. Et si je veux le nième, j'itère autant de fois que nécessaire...
On peut bien sur bricoler des trucs du genre :
ouCode:
1
2
3
4
5
6 Pattern p = Pattern.compile("([0-9]{4})(?:,[0-9\\.]+)|(,[0-9.]+)"); String entree = "12/12/2005,43.45,32.1,"; Matcher m = p.matcher(entree); int i = 1; while (m.find()) System.out.print(m.group(i++)); System.out.println();
ouCode:
1
2
3
4
5 Pattern p = Pattern.compile("[0-9]{4}|,3[0-9.]+"); String entree = "12/12/2005,43.45,32.1,"; Matcher m = p.matcher(entree); while (m.find()) System.out.print(m.group()); System.out.println();
ou encoreCode:
1
2
3
4
5 Pattern p = Pattern.compile("([0-9]{4}),.*?(,[0-9.]+)"); String entree = "12/12/2005,43.45,32.1,"; Matcher m = p.matcher(entree); while (m.find()) System.out.print(m.group(1) + m.group(2)); System.out.println();
mais c'est un peu tordu je trouve et bien se compliquer la vie.Code:
1
2
3
4
5
6
7
8
9 String entree = "12/12/2005,43.45,32.1,"; Pattern p = Pattern.compile("[0-9]{4}"); Matcher m = p.matcher(entree); while (m.find()) System.out.print(m.group()); p = Pattern.compile(",[0-9.]+"); m = p.matcher(entree); for (int i = 0; i < 2; i++) m.find(); System.out.print(m.group()); System.out.println();
En plus chercher une regexp exprimée telle que j'ai une entrée X et je veux obtenir une entrée Y n'est pas le moyen le plus simple pour savoir exactement ce qu'on veut faire. Une expression du genre je cherche une suite de 4 chiffres ou des nombres décimaux avec . comme virgule, séparés par des virgules me semble plus correspondre avec la notion de regexp.
Pourquoi pas simplement faire un split sur virgule, puis un parse avec un SimpleDateFormat sur le premier item et récupérer directement le troisième item ?
y a tu quel qu'un qui peu m'aider j'essayer de sélectionner un mot d’au moins 2 caractères répété au moins 5 fois dans une même ligne.
je veux sélectionner le mot est mes sa me donner :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import java.util.regex.*; public class Motif { public static void main(String[] args) { try{ Pattern p = Pattern .compile("([a-z]{2,}).{5}"); String entree = "la vie est est est est est belle"; Matcher m = p.matcher(entree); while (m.find()) System.out.println(entree.substring(m.start(), m.end())); }catch(PatternSyntaxException pse){} } }
la vie
est est
est est
est belle
merci pour votre aide
Salut,
comme tu cherches une répétition du même mot, il est nécessaire d'avoir un pattern qui exprime cette répétition. De plus le {5} s'appliquant au pattern juste devant, il s'applique à .
Ta regex cherche 2 lettres minuscules au moins, suivi de 5 caractères quelconques.
Pour résoudre ton cas :
Pattern p = Pattern.compile("([a-z]{2,}\\s)\\1{4}");
2 lettres au moins, suivie d'une espace, puis le motif trouvé, 4 fois.
Merci pour votre aide ,c'est excellent :ccool: